日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫:验证码识别准确率(Tesseract-OCR)

發布時間:2024/7/23 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫:验证码识别准确率(Tesseract-OCR) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?爬蟲:驗證碼識別準確率(Tesseract-OCR)

現在的網站為了防止人們輕易的獲取登陸后的頁面信息,在登陸上設置了很多的障礙,驗證碼就是其中的一種,所謂道高一尺,魔高一丈,人們總能想出辦法來予以應對,但是,應對的成本可能在不斷加大,這在一定程度上提升了反反爬蟲的門檻。本文的目的在于驗證Tesseract對普通驗證碼圖片的識別準確率,以便為后續的工作做準備。

Tesseract是一個開源的 OCR 引擎,可以識別多種格式的圖像文件并將其轉換成文本,由HP公司開發,后來由Google進行維護。下載地址:https://digi.bib.uni-mannheim.de/tesseract/

有關的安裝教程和使用方法,大家可以直接去百度,很多博主對此介紹的非常詳細,這篇博文的主要目的是利用該OCR來分析它對驗證碼識別的準確率。所以,對于安裝及有關環境的配置就不再多講了。

  • ? ?思路:
  • (1)獲取批量驗證碼圖片(利用某高校登錄頁面的驗證碼圖片) ;
  • (2)為驗證碼圖片做信息標注(雖然很不想手動標記,但這是必須的,因為我們要確保百分百正確);
  • (3)利用Tesseract-OCR對驗證碼圖片進行識別并測試識別效果;
  • (4)后續工作思路,如何提高識別的精度。

?一、爬取某高校頁面的驗證碼圖片100張

?

打開該網址,就可以看到該驗證碼圖片,并且沒刷新一次就會產生新的圖片;

使用代理不斷訪問該網址獲取驗證碼圖片,并保存為png格式文件;

from urllib import request import time import random def get_and_save_verify(i):try:url = 'http://jwxt.qlu.edu.cn/verifycode.servlet'request.urlretrieve(url, './verify_pictures/' + 'verify_' + str(i) + '.png')print('第' + str(i) + '張圖片下載成功')except Exception:print('第' + str(i) + '張圖片下載失敗')def get_proxy():# 使用代理步驟# - 1、設置代理地址proxys = [{'http': '39.137.69.10:8080'},{'http': '111.206.6.101:80'},{'http': '120.210.219.101:8080'},{'http': '111.206.6.101:80'},{'https': '120.237.156.43:8088'}]# - 2、創建ProxyHandlerproxy = random.choice(proxys)proxy_handler = request.ProxyHandler(proxy)# - 3、創建Openeropener = request.build_opener(proxy_handler)# - 4、導入Openerrequest.install_opener(opener)if __name__ == '__main__':for i in range(1, 101):get_proxy()time.sleep(random.randint(1, 4))get_and_save_verify(i)

?保存之后的圖片;

二、對驗證碼圖片手動信息標注,將圖片上的驗證信息放入圖片的名稱內,便于后續測試

這個過程比較無聊,標注完成之后的圖片是這樣的(無論數據分析還是圖像處理,信息標注很多時候對于程序員來說都是一個體力活,眼力活);

?三、利用Tesseract-OCR進行圖像信息識別,并將圖像的識別結果與藏在圖片文件名中的標簽進行比對,測試識別的準確率

這里涉及到圖像識別和數據處理,利用pytesseract庫來利用tesseract接口來進行識別,并比較結果,輸出準確率;

import pytesseract import cv2 import os import numpy as np path = 'F:/文件存放處/picture2/'file_name = [] for k in os.walk(path):file_name = k[-1]print('識別值' + '-----' + '真實值') num = 0 for i in file_name:img = cv2.imdecode(np.fromfile(path + i, dtype=np.uint8), 1)a = pytesseract.image_to_string(img)true_value = i[-8:-4]print(a + '-----' + true_value)if a == true_value:num += 1print('識別的準確率為:' + str(num/100))

?查看結果;

四、分析結果

改進結果不涉及對識別方法的改進,只涉及對數據和識別結果的改進。?

  • 通過測試結果可以看出,識別的準確率并不是很好,通過下面的兩種改進策略來提高識別的準確率,或者兩者聯合使用;
  • 改進策略一:(對識別結果的改進)
  • (1)觀察數據就可以看出,驗證中的信息是由字母和數字組成,不存在特殊字符,由于圖片中含有部分噪音,導致識別出現較大誤差,如果去除識別結果中的特殊字符,只保留數字和字母,識別的效果會在一定程度上改進。?

    (2)真實數據都是只占四個位置,所以,可以在第一條的基礎上,對字符的數量進行限制,設置為小于等于4

    (3)真實數據中不存在大寫字母,將識別結果一律轉換為小寫

  • 改進策略二:(對數據來源的降噪處理)
  • (1)通過觀察可以看到圖片上有很多噪音,利用OpenCV對圖片進行降噪處理

    后續處理:下一篇博文:https://blog.csdn.net/qq_40962368/article/details/89331608

    總結

    以上是生活随笔為你收集整理的爬虫:验证码识别准确率(Tesseract-OCR)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。