婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 爬蟲Python驗證碼識別入門

爬蟲Python驗證碼識別入門

熱門標簽:地圖標注審核表 湛江智能外呼系統廠家 長沙高頻外呼系統原理是什么 ai電話機器人哪里好 ai電銷機器人源碼 百度地圖標注沒有了 宿遷星美防封電銷卡 西藏房產智能外呼系統要多少錢 外呼并發線路

爬蟲Python驗證碼識別

前言:

二值化、普通降噪、8鄰域降噪
tesseract、tesserocr、PIL
參考文獻--代碼地址:https://github.com/liguobao/python-verify-code-ocr

 1、批量下載驗證碼圖片

import shutil
import requests
from loguru import logger

for i in range(100):
    url = 'http://xxxx/create/validate/image'
    response = requests.get(url, stream=True)
    with open(f'./imgs/{i}.png', 'wb') as out_file:
        response.raw.decode_content = True
        shutil.copyfileobj(response.raw, out_file)
        logger.info(f"download {i}.png successfully.")
    del response
 
 

2、識別代碼看看效果

from PIL import Image
import tesserocr
img = Image.open("./imgs/98.png")
img.show()
img_l = img.convert("L")# 灰階圖
img_l.show()
verify_code1 = tesserocr.image_to_text(img)
verify_code2 = tesserocr.image_to_text(img_l)
print(f"verify_code1:{verify_code1}")
print(f"verify_code2:{verify_code2}")
 

毫無疑問,無論是原圖還是灰階圖,一無所有。

 3、折騰降噪、去干擾

Python圖片驗證碼降噪 - 8鄰域降噪

from PIL import Image
# https://www.cnblogs.com/jhao/p/10345853.html Python圖片驗證碼降噪 — 8鄰域降噪

 
def noise_remove_pil(image_name, k):
    """
    8鄰域降噪
    Args:
        image_name: 圖片文件命名
        k: 判斷閾值
    Returns:
    """

    def calculate_noise_count(img_obj, w, h):
        """
        計算鄰域非白色的個數
        Args:
            img_obj: img obj
            w: width
            h: height
        Returns:
            count (int)
        """
        count = 0
        width, height = img_obj.size
        for _w_ in [w - 1, w, w + 1]:
            for _h_ in [h - 1, h, h + 1]:
                if _w_ > width - 1:
                    continue
                if _h_ > height - 1:
                    continue
                if _w_ == w and _h_ == h:
                    continue
                if img_obj.getpixel((_w_, _h_))  230:  # 這里因為是灰度圖像,設置小于230為非白色
                    count += 1
        return count

    img = Image.open(image_name)
    # 灰度
    gray_img = img.convert('L')

    w, h = gray_img.size
    for _w in range(w):
        for _h in range(h):
            if _w == 0 or _h == 0:
                gray_img.putpixel((_w, _h), 255)
                continue
            # 計算鄰域非白色的個數
            pixel = gray_img.getpixel((_w, _h))
            if pixel == 255:
                continue

            if calculate_noise_count(gray_img, _w, _h)  k:
                gray_img.putpixel((_w, _h), 255)
    return gray_img


if __name__ == '__main__':
    image = noise_remove_pil("./imgs/1.png", 4)
    image.show()
 

看下圖效果:

這樣差不多了,不過還可以提升

提升新思路:

這邊的干擾線是從某個點發出來的紅色線條,

其實我只需要把紅色的像素點都干掉,這個線條也會被去掉。

from PIL import Image
import tesserocr
img = Image.open("./imgs/98.png")
img.show()

# 嘗試去掉紅像素點
w, h = img.size
for _w in range(w):
    for _h in range(h):
        o_pixel = img.getpixel((_w, _h))
        if o_pixel == (255, 0, 0):
            img.putpixel((_w, _h), (255, 255, 255))
img.show()

img_l = img.convert("L")
# img_l.show()
verify_code1 = tesserocr.image_to_text(img)
verify_code2 = tesserocr.image_to_text(img_l)
print(f"verify_code1:{verify_code1}")
print(f"verify_code2:{verify_code2}")

看起來OK,上面還有零星的藍色像素掉,也可以用同樣的方法一起去掉。

甚至OCR都直接出效果了
好了,完結撒花。
不過,后面發現,有些紅色線段和藍色點,是和驗證碼重合的。
這個時候,如果直接填成白色,就容易把字母切開,導致識別效果變差。
當前點是紅色或者藍色,判斷周圍點是不是超過兩個像素點是黑色。
是,填充為黑色。
否,填充成白色。

最終完整代碼:

from PIL import Image
import tesserocr
from loguru import logger


class VerfyCodeOCR():
    def __init__(self) -> None:
        pass

    def ocr(self, img):
        """ 驗證碼OCR

        Args:
            img (img): imgObject/imgPath

        Returns:
            [string]: 識別結果
        """
        img_obj = Image.open(img) if type(img) == str else img
        self._remove_pil(img_obj)
        verify_code = tesserocr.image_to_text(img_obj)
        return verify_code.replace("\n", "").strip()

    def _get_p_black_count(self, img: Image, _w: int, _h: int):
        """ 獲取當前位置周圍像素點中黑色元素的個數

        Args:
            img (img): 圖像信息
            _w (int): w坐標
            _h (int): h坐標

        Returns:
            int: 個數
        """
        w, h = img.size
        p_round_items = []
        # 超過了橫縱坐標
        if _w == 0 or _w == w-1 or 0 == _h or _h == h-1:
            return 0
        p_round_items = [img.getpixel(
            (_w, _h-1)), img.getpixel((_w, _h+1)), img.getpixel((_w-1, _h)), img.getpixel((_w+1, _h))]
        p_black_count = 0
        for p_item in p_round_items:
            if p_item == (0, 0, 0):
                p_black_count = p_black_count+1
        return p_black_count

    def _remove_pil(self, img: Image):
        """清理干擾識別的線條和噪點

        Args:
            img (img): 圖像對象

        Returns:
            [img]: 被清理過的圖像對象
        """
        w, h = img.size
        for _w in range(w):
            for _h in range(h):
                o_pixel = img.getpixel((_w, _h))
                # 當前像素點是紅色(線段) 或者 綠色(噪點)
                if o_pixel == (255, 0, 0) or o_pixel == (0, 0, 255):
                    # 周圍黑色數量大于2,則把當前像素點填成黑色;否則用白色覆蓋
                    p_black_count = self._get_p_black_count(img, _w, _h)
                    if p_black_count >= 2:
                        img.putpixel((_w, _h), (0, 0, 0))
                    else:
                        img.putpixel((_w, _h), (255, 255, 255))

        logger.info(f"_remove_pil finish.")
        # img.show()
        return img


if __name__ == '__main__':
    verfyCodeOCR = VerfyCodeOCR()
    img_path = "./imgs/51.png"
    img= Image.open(img_path)
    img.show()
    ocr_result = verfyCodeOCR.ocr(img)
    img.show()
    logger.info(ocr_result)


到此這篇關于爬蟲Python驗證碼識別入門的文章就介紹到這了,更多相關Python驗證碼識別內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 關于python爬蟲應用urllib庫作用分析
  • python爬蟲Scrapy框架:媒體管道原理學習分析
  • python爬蟲Mitmproxy安裝使用學習筆記
  • Python爬蟲和反爬技術過程詳解
  • python爬蟲之Appium爬取手機App數據及模擬用戶手勢
  • Python爬蟲技術
  • Python爬蟲爬取商品失敗處理方法
  • Python獲取江蘇疫情實時數據及爬蟲分析
  • Python爬蟲之Scrapy環境搭建案例教程
  • Python爬蟲中urllib3與urllib的區別是什么
  • 教你如何利用python3爬蟲爬取漫畫島-非人哉漫畫
  • Python爬蟲分析匯總

標簽:海南 普洱 大同 寧夏 盤錦 林芝 漯河 南平

巨人網絡通訊聲明:本文標題《爬蟲Python驗證碼識別入門》,本文關鍵詞  爬蟲,Python,驗證,碼,識別,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《爬蟲Python驗證碼識別入門》相關的同類信息!
  • 本頁收集關于爬蟲Python驗證碼識別入門的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美激情综合网| 麻豆精品久久精品色综合| 99视频有精品| 国产盗摄精品一区二区三区在线| 久久精品欧美日韩精品| 国产三级精品在线| 久久免费国产精品| 久久久精品黄色| 99久久免费国产| 欧美高清dvd| 26uuu另类欧美亚洲曰本| 中文字幕欧美激情| 无吗不卡中文字幕| 精品一区二区三区在线播放视频| 国产一区在线精品| 色综合久久中文综合久久牛| 国产99久久精品| 欧美日韩一区二区欧美激情| 精品国产第一区二区三区观看体验 | 亚洲1区2区3区4区| 国内成人自拍视频| 欧美伦理电影网| 综合欧美亚洲日本| 国产夫妻精品视频| 精品少妇一区二区三区视频免付费| 国产三级精品在线| 国产揄拍国内精品对白| 91精品在线观看入口| 亚洲色图在线看| 粉嫩aⅴ一区二区三区四区 | 国产精品福利在线播放| 美女任你摸久久| 欧美精品久久久久久久久老牛影院| 亚洲欧美另类综合偷拍| 国产精品亚洲专一区二区三区| 狠狠久久亚洲欧美| 欧美日韩一区二区三区在线| 亚洲三级在线免费| 一区二区三区国产豹纹内裤在线 | 欧美疯狂性受xxxxx喷水图片| 久久久久国产精品免费免费搜索| 美女视频第一区二区三区免费观看网站| 色香色香欲天天天影视综合网| 成人免费一区二区三区视频| 懂色一区二区三区免费观看| 国产日韩精品一区二区三区| 国产精品一品视频| 欧美精品一区二区久久婷婷| 看电影不卡的网站| 26uuu亚洲| 成人午夜av影视| 亚洲免费色视频| 欧美日韩另类一区| 一区二区三区欧美在线观看| 欧美午夜片在线观看| 亚洲国产日产av| 日韩一区二区精品葵司在线| 国产在线视频一区二区三区| 中文字幕欧美日韩一区| 免费高清不卡av| 久久久不卡影院| 精品欧美乱码久久久久久 | 久久99热这里只有精品| 久久免费看少妇高潮| 一区二区三区中文字幕精品精品 | 欧美色大人视频| 91偷拍与自偷拍精品| 国产成人精品1024| 国产一区福利在线| 极品少妇xxxx精品少妇偷拍 | 粉嫩绯色av一区二区在线观看| 激情丁香综合五月| 久久成人免费日本黄色| 视频一区视频二区中文| 午夜精品久久久久久不卡8050| 亚洲日本在线观看| 亚洲女同一区二区| 一区二区久久久| 亚洲成av人片在线观看无码| 一区二区三区在线播放| 亚洲欧美激情小说另类| 亚洲人xxxx| 亚洲午夜久久久久久久久电影院| 亚洲午夜免费视频| 日韩精品国产精品| 日本va欧美va欧美va精品| 日本欧美一区二区在线观看| 青娱乐精品视频| 国产一区二区三区四| 成人性生交大合| 日本二三区不卡| 日韩欧美激情一区| 久久久精品国产99久久精品芒果| 国产亚洲欧美在线| 一区二区三区精品视频在线| 香港成人在线视频| 国产麻豆91精品| 一本久久a久久免费精品不卡| 欧美色电影在线| 精品国产乱码久久久久久闺蜜| 国产欧美一区二区精品仙草咪| 中文字幕在线观看一区| 亚洲成人精品一区二区| 日本人妖一区二区| 亚洲午夜三级在线| 91精品国产91热久久久做人人| 日韩美女在线视频| 亚洲天堂精品视频| 毛片av一区二区三区| 丁香婷婷综合色啪| 在线不卡中文字幕| 国产乱理伦片在线观看夜一区| 97久久超碰国产精品电影| 欧美激情综合五月色丁香小说| 亚洲高清中文字幕| 国产一区在线观看视频| 在线观看av一区| 国产午夜三级一区二区三| 亚洲电影激情视频网站| 粉嫩在线一区二区三区视频| 555www色欧美视频| 日韩一区在线播放| 国产一区二区0| 7777精品伊人久久久大香线蕉 | 国产一区二区不卡| 欧美日韩精品一区二区三区四区 | 国产一区视频网站| 欧美二区三区91| 亚洲丝袜制服诱惑| 国产自产v一区二区三区c| 欧美日韩在线亚洲一区蜜芽| 26uuu国产日韩综合| 亚洲777理论| 97se亚洲国产综合自在线观| 日韩三级高清在线| 中文字幕人成不卡一区| 麻豆精品蜜桃视频网站| 337p亚洲精品色噜噜| 一区二区免费看| 国产美女av一区二区三区| 4438x成人网最大色成网站| 亚洲一区在线看| 成人av小说网| 国产精品久久久久久久久图文区 | 欧美一区二区精美| 日本中文在线一区| 91精品国产91久久久久久一区二区 | 在线成人午夜影院| 午夜免费欧美电影| 欧美午夜一区二区三区| 17c精品麻豆一区二区免费| 不卡av在线免费观看| 国产人成亚洲第一网站在线播放| 捆绑调教一区二区三区| 久久综合视频网| 欧美老女人在线| 免费在线观看日韩欧美| 日韩欧美在线不卡| 国产一区二区精品在线观看| 亚洲国产精品t66y| 北岛玲一区二区三区四区| 亚洲欧洲99久久| 在线视频亚洲一区| 一本久久a久久精品亚洲| 亚洲欧美日韩在线不卡| 91在线观看视频| 亚洲一区二区三区激情| 制服.丝袜.亚洲.另类.中文| 久久99蜜桃精品| 亚洲国产精品av| 欧洲另类一二三四区| 天堂久久久久va久久久久| 精品蜜桃在线看| 91理论电影在线观看| 91福利精品视频| 久久国产欧美日韩精品| 国产婷婷色一区二区三区在线| va亚洲va日韩不卡在线观看| 亚洲一区二区三区三| 日韩欧美国产综合| 波多野结衣在线aⅴ中文字幕不卡| 一区二区三区在线免费| 国产日韩欧美综合在线| 欧美性做爰猛烈叫床潮| 国产成人午夜视频| 丝袜亚洲另类欧美| 国产欧美一区二区在线| 欧美浪妇xxxx高跟鞋交| 国产a级毛片一区| 日产欧产美韩系列久久99| 最新日韩在线视频| 精品久久久三级丝袜| 欧美综合在线视频| 一区二区三区欧美| 91精品国产日韩91久久久久久| 99久久精品国产导航| 精品亚洲免费视频| 日本大胆欧美人术艺术动态| 亚洲综合成人在线视频| 国产精品网曝门|