最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用 Python 和 LabelMe 實現(xiàn)圖片驗證碼的自動標注功能

 更新時間:2024年12月31日 15:30:10   作者:XMYX-0  
文章介紹了如何使用Python和LabelMe自動標注圖片驗證碼,主要步驟包括圖像預(yù)處理、OCR識別和生成標注文件,通過結(jié)合PaddleOCR,可以快速實現(xiàn)驗證碼字符的自動標注,大幅提升工作效率,感興趣的朋友一起看看吧

使用 Python 和 LabelMe 實現(xiàn)圖片驗證碼的自動標注

在處理圖片驗證碼時,手動標注是一項耗時且枯燥的工作。本文將介紹如何使用 Python 和 LabelMe 實現(xiàn)圖片驗證碼的自動標注。通過結(jié)合 PaddleOCR 實現(xiàn)自動識別,再生成 LabelMe 格式的標注文件,大幅提升工作效率。

環(huán)境準備

必備工具

  • Python 3.7+
  • PaddleOCR(支持文字識別)
  • OpenCV(圖像處理)
  • LabelMe(標注工具)

安裝依賴

使用以下命令安裝所需庫:

pip install paddleocr labelme opencv-python

實現(xiàn)自動標注

自動標注分為以下幾個步驟:

  • 加載圖片:讀取圖片文件,確保格式正確。
  • 圖像預(yù)處理:對驗證碼圖片進行灰度化和二值化處理,優(yōu)化識別效果。
  • OCR 識別:使用 PaddleOCR 獲取驗證碼中的文字和位置。
  • 生成標注文件:根據(jù) OCR 結(jié)果創(chuàng)建符合 LabelMe 格式的 JSON 文件。

核心代碼實現(xiàn)

以下是完整的自動標注腳本:

import os
import cv2
from paddleocr import PaddleOCR
def auto_label_image(image_path, output_path):
    # 檢查文件是否存在
    if not os.path.exists(image_path):
        print(f"Error: File not found: {image_path}")
        return
    # 加載圖像
    image = cv2.imread(image_path)
    if image is None:
        print(f"Error: Failed to load image. Check the file path or format: {image_path}")
        return
    # 圖像預(yù)處理
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    _, binary_image = cv2.threshold(gray_image, 128, 255, cv2.THRESH_BINARY)
    # 保存預(yù)處理后的圖片(可選,用于調(diào)試)
    preprocessed_path = os.path.join(output_path, "processed_image.jpg")
    cv2.imwrite(preprocessed_path, binary_image)
    # 初始化 OCR
    ocr = PaddleOCR(use_angle_cls=True, lang='en')
    # OCR 識別
    results = ocr.ocr(preprocessed_path)
    if not results or not results[0]:
        print(f"No text detected in the image: {image_path}")
        return
    # 獲取圖像尺寸
    image_height, image_width, _ = image.shape
    # 構(gòu)建標注 JSON
    label_data = {
        "version": "4.5.7",
        "flags": {},
        "shapes": [],
        "imagePath": os.path.basename(image_path),
        "imageData": None,
        "imageHeight": image_height,
        "imageWidth": image_width,
    }
    # 遍歷 OCR 結(jié)果
    for line in results[0]:
        points = line[0]  # 字符位置 [左上, 右上, 右下, 左下]
        text = line[1][0]  # 識別的文本
        shape = {
            "label": text,
            "points": [points[0], points[2]],  # 左上角和右下角
            "group_id": None,
            "shape_type": "rectangle",
            "flags": {}
        }
        label_data["shapes"].append(shape)
    # 保存標注 JSON
    json_path = os.path.join(output_path, os.path.basename(image_path).replace('.jpg', '.json'))
    with open(json_path, 'w') as f:
        import json
        json.dump(label_data, f, indent=4)
    print(f"Saved LabelMe annotation: {json_path}")
# 示例
image_path = r"C:\Users\wangzq\Desktop\images\captcha.jpg"
output_path = "./annotations"
os.makedirs(output_path, exist_ok=True)
auto_label_image(image_path, output_path)

核心邏輯解析

圖像預(yù)處理

為了提高 OCR 的識別精度,對驗證碼圖片進行灰度化和二值化處理:

gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, binary_image = cv2.threshold(gray_image, 128, 255, cv2.THRESH_BINARY)

二值化處理可以去除背景噪聲,使字符更加清晰。

OCR 識別

使用 PaddleOCR 對圖片進行文字檢測和識別,返回檢測框和文字內(nèi)容:

ocr = PaddleOCR(use_angle_cls=True, lang='en')
results = ocr.ocr(preprocessed_path)

如果 results 為空,說明 OCR 未檢測到任何文本。

生成標注文件

根據(jù) OCR 結(jié)果,生成 LabelMe 格式的標注文件,關(guān)鍵字段包括:

  • shapes:標注框信息,包括位置和對應(yīng)文字。
  • imageHeight 和 imageWidth:圖像的尺寸。

運行結(jié)果

  • 輸出預(yù)處理圖片:在指定路徑下保存經(jīng)過預(yù)處理的圖片(processed_image.jpg)。
  • 生成標注文件:在 output_path 目錄下生成與圖片同名的 .json 文件。
  • 無文本檢測提示:如果未檢測到任何文本,提示 No text detected in the image

擴展與優(yōu)化

模型適配

如果驗證碼中的字符種類較復(fù)雜,可以考慮訓(xùn)練一個專用模型,替代通用的 PaddleOCR。

批量處理

針對多張圖片驗證碼,可以將腳本擴展為批量處理模式:

for image_file in os.listdir(input_folder):
    image_path = os.path.join(input_folder, image_file)
    auto_label_image(image_path, output_path)

標注類型擴展

目前代碼僅支持矩形框標注。如果需要支持多邊形標注,可以調(diào)整 shape_typepolygon 并提供相應(yīng)點坐標。

總結(jié)

本文介紹了如何使用 Python 和 LabelMe 自動標注圖片驗證碼,從圖像預(yù)處理到生成標注文件的完整流程。通過 PaddleOCR 的結(jié)合,可以快速實現(xiàn)驗證碼字符的自動標注,節(jié)省大量時間和精力。

測試

運行完腳本,出來json

{
    "version": "4.5.7",
    "flags": {},
    "shapes": [
        {
            "label": "OZLQ",
            "points": [
                [
                    6.0,
                    1.0
                ],
                [
                    68.0,
                    21.0
                ]
            ],
            "group_id": null,
            "shape_type": "rectangle",
            "flags": {}
        }
    ],
    "imagePath": "captcha.png",
    "imageData": null,
    "imageHeight": 22,
    "imageWidth": 76
}
{
    "version": "4.5.7",
    "flags": {},
    "shapes": [
        {
            "label": "3081",
            "points": [
                [
                    6.0,
                    1.0
                ],
                [
                    63.0,
                    21.0
                ]
            ],
            "group_id": null,
            "shape_type": "rectangle",
            "flags": {}
        }
    ],
    "imagePath": "captcha.png",
    "imageData": null,
    "imageHeight": 22,
    "imageWidth": 76
}

目前較為復(fù)雜還需要深度研究

到此這篇關(guān)于使用 Python 和 LabelMe 實現(xiàn)圖片驗證碼的自動標注的文章就介紹到這了,更多相關(guān)Python圖片驗證碼自動標注內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你深入理解Python魔法方法

    一文帶你深入理解Python魔法方法

    在Python中,魔法方法是指那些以雙下劃線開頭和結(jié)尾的特殊方法,它們是Python的內(nèi)置方法,對應(yīng)于Python對象的各種運算符,這篇文章將深入探討Python的一些魔法方法,并通過示例展示如何使用它們,需要的朋友可以參考下
    2023-06-06
  • 使用Python實現(xiàn)從零開始打造一個三維繪圖系統(tǒng)

    使用Python實現(xiàn)從零開始打造一個三維繪圖系統(tǒng)

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)一個繪圖系統(tǒng),通過指定x,y,z的表達式,以實現(xiàn)三維繪圖的目的,感興趣的可以了解下
    2024-02-02
  • python中import warnings的具體作用

    python中import warnings的具體作用

    在Python開發(fā)中,我們經(jīng)常會遇到一些警告信息,本文主要介紹了python中import warnings的具體作用,以提醒用戶潛在的問題,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 在PyCharm中使用FMEObjects的操作步驟

    在PyCharm中使用FMEObjects的操作步驟

    這篇文章主要介紹了在PyCharm中使用FMEObjects,本文將ArcGISPro2.8的Python3.7解釋器與FME2022.0配合使用,通過圖文并茂的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Python實現(xiàn)批量分割PDF文件

    Python實現(xiàn)批量分割PDF文件

    這篇文章主要為大家詳細介紹了使用Python進行批量分割PDF文件的相關(guān)方法,我們將從架構(gòu)設(shè)計入手,逐步講解代碼實現(xiàn)的過程,希望對大家有所幫助
    2023-11-11
  • 利用python庫matplotlib繪制不同的圖表

    利用python庫matplotlib繪制不同的圖表

    這篇文章主要介紹了利用python庫matplotlib繪制不同的圖表,使用python中的matplotlib繪制圖表,主要分享繪制簡單的曲線圖、單條曲線圖、多條曲線圖、直方圖以及散點圖的思路和用法,需要的朋友可以參考一下
    2022-03-03
  • python向量化與for循環(huán)耗時對比分析

    python向量化與for循環(huán)耗時對比分析

    這篇文章主要介紹了python向量化與for循環(huán)耗時對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 從Node.js+TypeScript無縫切換到Python的完整過程實錄

    從Node.js+TypeScript無縫切換到Python的完整過程實錄

    隨著技術(shù)的發(fā)展,越來越多的項目需要同時使用多種編程語言進行開發(fā),Python和Node.js都是非常流行的編程語言,分別有著各自的優(yōu)勢和適用場景,這篇文章主要介紹了從Node.js+TypeScript無縫切換到Python的完整過程,需要的朋友可以參考下
    2026-06-06
  • 分享15 超級好用得 Python 實用技巧

    分享15 超級好用得 Python 實用技巧

    這篇文章主要分享了15 超級好用得 Python 實用技巧,如果你對其中一個或多個感興趣,可以參考一下,希望對你能有所幫助
    2021-12-12
  • python多維數(shù)組分位數(shù)的求取方式

    python多維數(shù)組分位數(shù)的求取方式

    這篇文章主要介紹了python多維數(shù)組分位數(shù)的求取方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論

文水县| 剑河县| 射洪县| 西安市| 鸡泽县| 安义县| 海林市| 同江市| 铁岭市| 尤溪县| 石狮市| 静安区| 枞阳县| 汝州市| 长宁县| 宝丰县| 淳化县| 荆州市| 金华市| 中阳县| 牙克石市| 信丰县| 香河县| 景泰县| 英德市| 稷山县| 梅州市| 浮梁县| 梨树县| 始兴县| 莆田市| 昌图县| 绍兴县| 抚宁县| 嘉荫县| 临猗县| 方山县| 浏阳市| 上蔡县| 耿马| SHOW|