(4)Pythonのクローラークリーンコード{シミュレートにアクセスするためのユーザー]を注

クリーンアップの画像を、画像を2値化され、国境をポイントに、ラインを妨害します

PILのインポートイメージ
 から pytesseract インポート *
 からのfnmatch インポートのfnmatch
 からキューインポートキュー
 インポートPLTのようmatplotlib.pyplot
 インポートCV2の
 インポート時間
 インポートOSの


デフclear_border(IMG、img_name):
   '' ' 边框去除
   ''' 

  W、Hを IMG =。形状[2 ]
   用の Y (W 0)範囲:
     のためのx における範囲(0、H):
      Y Y == 0またはIF == Y == W W -1 - 2:
      IF Y <4。又は Y> -4 W 
        IMG [X、Y] = 255
       X又はX == H == 0 IF 。 -またはX == 1つのH - 2:
      IF X <4。または H - 4 X> 
        IMG [X、Y] = 255 戻りIMG DEF interference_line(IMG、img_name):
   '' ' 
  干渉雑音ライン' '' 
  H 、W = img.shape [:2 ]
   OpenCVのマトリクスポイントが反転する。#IMG [1,2] 1:画像の高さ、2:画像の幅のために R&LT 範囲(0,2 用の Y 


  


  

  
  範囲(1、W - 1 のために、X における範囲(1、H - 1 ):
        カウント = 0
         場合 IMG [x、y - 1]> 245 
          カウント =カウント+ 1
         なら IMG [x、y + 1] > 245 
          カウント + 1カウント=
         場合のIMG [X - 1、y]は> 245 
          カウント + 1カウント=
         場合 IMGの[X + 1、Y]> 245 
          カウント + 1カウント=
         あればカウント> 2 
          IMG [X 、y]は 255 = リターンIMGを

  

DEFの interference_point(IMG、img_name、X = 0、Y = 0):
     "" " ドットノイズ
    中央卍ブロック、ブラックドットの数として現在の点9隣接ブロック
    :PARAMのX:
    :PARAMのY: リターン:
    "" " 
    #1 TODO長い幅が下限画像決定 
    cur_pixel IMG = [X、Y] の現在の画素値 
    の高さ、幅= img.shapeの[2 ] 

    のために Y における範囲(0、幅- 1。 ):
        X における範囲(0、高さ- 1 ):
         IF:Y == 0   最初の行
            IF X == 0:  左上隅は、4つの隣接
                三点の中心点の横 
                和=INT(cur_pixel)\
                       + INT(IMG [x、y + 1 ])\
                       + INT(IMG [X + 1 、Y])\
                       + INT(IMGの[X + 1、Y + 1 ])
                 であれば和<= 2 * 245 
                  IMG [x、y] = 0
             ELIFの X ==高さ- 1:  右上顶点 
                和= INT(cur_pixel)\
                       + INT(IMG [x、y + 1 ])\
                       + INT(IMGの[X - 1 、Y])\
                       + INT(IMG [X - 1、Y + 1 ])
                 であれば和<= 2 * 245
                  IMG [X、Y]は = 0
             最上位の非頂点、6つの近傍 
                SUM = INT(IMG [X - 1 、Y])\
                       + INT(IMG [。。X - 1、Y + 1 ])\
                       + INT( cur_pixel)\
                       + INT(IMG [X、Y + 1 ])\
                       + INT(IMG [Xの+ 1 、Y])\
                       + INT(IMG [Xの+ 1、Y + 1 ])
                 IF SUM <= 3×245 
                  IMG [X、Y] = 0
         ELIFの Y ==幅- 1:  ボトムライン
            IF X == 0:  左下頂点
                #の次の3つの点の中心点 
                SUM = INT(cur_pixel)\
                       + INT(IMG [+ 1 X 、Y])\
                       + INT(IMGの[1 X +、Y - 1 ])\
                       + INT(IMG [ X、Y - 1。])
                 IF SUM <= 245 * 2 
                  IMG [X、Y] = 0
             ELIFの X ==高さ- 1:  右下頂点 
                SUM = INT(cur_pixel)\
                       + INT(IMG [X、Y - 1 ])\
                       + INT(IMG [X - 1 、Y])\
                       + INT(IMG [X - 1、Y - 1])

                であれば和<= 2 * 245 
                  IMG [x、y] = 0
             さもなければ最下非顶点、6邻域 
                和= INT(cur_pixel)\
                       + INT(IMGの[X - 1 、y]の)\
                       + INT(IMGの[X + 1 、Y])\
                       + INT(IMG [x、y - 1 ])\
                       + INT(IMGの[X - 1、Y - 1 ])\
                       + INT(IMG [X + 1、Y - 1 ])
                 であれば和<= 3 * 245 
                  IMG [x、y] = 0
         さもなければyが境界ない
            IF:Xは== 0   頂点以外左 
                SUM = INT(IMG [X、Y - 1 ])\
                       + INT(cur_pixel)\
                       + INT(IMG [X、Y軸+ 1。\])
                       + INT(IMG - [X + 1、Y 1。。)\]
                       + INT(IMG [X + 1 、Y])\
                       + INT(IMG [X + 1、Y + 1。])

                IF SUM <= 3 * 245。 
                  IMG [X、 Y] = 0
             ELIFの X ==高さ- 1:  非頂点右に 
                (IMG [X、Y - 1 SUM = INT ])\
                       +INT(cur_pixel)\
                       + INT(IMG [x、y + 1 ])\
                       + INT(IMGの[X - 1、Y - 1 ])\
                       + INT(IMG [X - 1 、y]の)\
                       + INT(IMG [X - 1、Y + 1 ])

                であれば和<= 3 * 245 
                  IMG [x、y] = 0
             さもなければ具备9领域条件的 
                和= INT(IMGの[X - 1、Y - 1 ])\
                       + INT(IMG [X - 1 、y]の)\
                       + INT(IMGの[X - 1、Y + 1 ])\
                       + INT(IMG [x、y - 1 ])\
                       +INT(cur_pixel)\
                       + INT(IMG [x、y + 1 ])\
                       + INT(IMGの[X + 1、Y - 1 ])\
                       + INT(IMG [X + 1 、Y])\
                       + INT(IMG [X + 1、Y + 1 ])
                 であれば和<= 4 * 245 
                  IMG [x、y] = 0 
              
    戻りIMGの

デフ_get_dynamic_binary_image(FILEDIR、img_name):
   '' ' 
  自适应阀值二值化
  ''' 
  のファイル名 =    ' ./easy_code/ ' + img_name.split(' ')[0] + ' -binary。JPG' 
  img_name = FILEDIR + ' / ' + img_name 
  IM = cv2.imread(img_name)
  IM = cv2.cvtColor(IM、cv2.COLOR_BGR2GRAY)

  TH1 = cv2.adaptiveThreshold(IM、255、cv2.ADAPTIVE_THRESH_GAUSSIAN_C、cv2.THRESH_BINARY、21、 1 

  を返すTh1は

デフ)(認識:  
FILEDIR
= ' ./images ' #验证码路径 ためのファイルos.listdir(FILEDIR): もしのfnmatch(ファイル、' * .JPG ' ): img_name =ファイル 適応2値化閾値 IM = _get_dynamic_binary_image(FILEDIR、img_name) 削除境界 IM = clear_border(IM、img_name) ラインノイズ干渉画像の IM = interference_line(IM、img_name) ノイズ画像点の = IMのinterference_point(IM、img_name) ファイル名 = ' ./easy_code/ ' + img_name.split(' ')[0] + ' -interferencePoint.jpg パス保存する' #easy_code cv2.imwrite(ファイル名、IM)を#セーブ写真は (認識)

ビッグブラザー用ボス淀魚粗い識別コードと詳細な説明があることを「Pythonの識別コード」から、上記コードの変更。

添付リンクします。https://www.cnblogs.com/qqandfqr/p/7866650.html

おすすめ

転載: www.cnblogs.com/dfy-blog/p/11563331.html