自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自定義 Yolov10 和 Ollama(Llama 3)增強(qiáng) OCR

人工智能
你可以通過(guò)結(jié)合自定義訓(xùn)練的YOLOv10模型和EasyOCR,并使用LLM增強(qiáng)結(jié)果,顯著改進(jìn)文本識(shí)別工作流程。

最近,我大部分時(shí)間都在玩大型語(yǔ)言模型(LLMs),但我對(duì)計(jì)算機(jī)視覺(jué)的熱愛(ài)從未真正消退。因此,當(dāng)有機(jī)會(huì)將兩者結(jié)合起來(lái)時(shí),我迫不及待地想要深入研究。在Goodreads上掃描書的封面并將其標(biāo)記為“已讀”總是感覺(jué)像一種魔法,我忍不住想要為自己重現(xiàn)這種體驗(yàn)。

通過(guò)結(jié)合自定義訓(xùn)練的YOLOv10模型和OCR技術(shù),你可以獲得巨大的準(zhǔn)確性提升。但當(dāng)你加入一個(gè)LLM(Llama 3)時(shí),真正的魔法就發(fā)生了——那些混亂的OCR輸出突然變成了干凈、可用的文本,非常適合實(shí)際應(yīng)用。

為什么我們需要在OCR中使用YOLO和Ollama?

傳統(tǒng)的OCR(光學(xué)字符識(shí)別)方法在從簡(jiǎn)單圖像中提取文本方面做得很好,但當(dāng)文本與其他視覺(jué)元素交織在一起時(shí),往往難以應(yīng)對(duì)。通過(guò)使用自定義的YOLO模型首先檢測(cè)文本區(qū)域等對(duì)象,我們可以為OCR隔離這些區(qū)域,顯著減少噪聲并提高準(zhǔn)確性。讓我們通過(guò)在沒(méi)有YOLO的圖像上運(yùn)行一個(gè)基本的OCR示例來(lái)演示這一點(diǎn),以突出單獨(dú)使用OCR的挑戰(zhàn):

import easyocr
import cv2
# Initialize EasyOCR
reader = easyocr.Reader(['en'])
# Load the image
image = cv2.imread('book.jpg')
# Run OCR directly
results = reader.readtext(image)
# Display results
for (bbox, text, prob) in results:
    print(f"Detected Text: {text} (Probability: {prob})")
THE 0 R |G |NAL B E STSELLE R THE SECRET HISTORY DONNA TARTT Haunting, compelling and brilliant The Times

雖然它可以很好地處理更簡(jiǎn)單的圖像,但當(dāng)存在噪聲或復(fù)雜的視覺(jué)模式時(shí),錯(cuò)誤就開始堆積。這時(shí),YOLO模型介入并真正發(fā)揮作用。

1. 訓(xùn)練自定義Yolov10數(shù)據(jù)集

用對(duì)象檢測(cè)增強(qiáng)OCR的第一步是在你數(shù)據(jù)集上訓(xùn)練一個(gè)自定義的YOLO模型。YOLO(You Only Look Once)是一個(gè)強(qiáng)大的實(shí)時(shí)對(duì)象檢測(cè)模型,它將圖像劃分為網(wǎng)格,允許它在單次前向傳遞中識(shí)別多個(gè)對(duì)象。這種方法非常適合檢測(cè)圖像中的文本,特別是當(dāng)你想要通過(guò)隔離特定區(qū)域來(lái)提高OCR結(jié)果時(shí)。

書籍封面數(shù)據(jù)集

我們將使用這里鏈接的預(yù)注釋書籍封面數(shù)據(jù)集,并在它上面訓(xùn)練一個(gè)YOLOv10模型。YOLOv10針對(duì)較小的對(duì)象進(jìn)行了優(yōu)化,使其非常適合在視頻或掃描文檔等具有挑戰(zhàn)性的環(huán)境中檢測(cè)文本。

from ultralytics import YOLO

model = YOLO("yolov10n.pt")
# Train the model
model.train(data="datasets/data.yaml", epochs=50, imgsz=640)

你可以調(diào)整周期數(shù)量、數(shù)據(jù)集大小等參數(shù),或者嘗試調(diào)整超參數(shù)以提高模型的性能和準(zhǔn)確性。

YOLOv10自定義數(shù)據(jù)集訓(xùn)練的關(guān)鍵指標(biāo)

2. 在視頻上運(yùn)行自定義模型以獲取邊界框

一旦你的YOLO模型訓(xùn)練完成,你可以將其應(yīng)用于視頻以檢測(cè)文本區(qū)域周圍的邊界框。這些邊界框隔離了感興趣的區(qū)域,確保了更干凈的OCR過(guò)程:


import cv2
# Open video file
video_path = 'books.mov'
cap = cv2.VideoCapture(video_path)
# Load YOLO model
model = YOLO('model.pt')
# Function for object detection and drawing bounding boxes
def predict_and_detect(model, frame, conf=0.5):
    results = model.predict(frame, conf=conf)
    for result in results:
        for box in result.boxes:
            # Draw bounding box
            x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())
            cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)
    return frame, results
# Process video frames
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    # Run object detection
    processed_frame, results = predict_and_detect(model, frame)
    # Show video with bounding boxes
    cv2.imshow('YOLO + OCR Detection', processed_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# Release video
cap.release()
cv2.destroyAllWindows()

這段代碼實(shí)時(shí)處理視頻,繪制檢測(cè)到的文本周圍的邊界框,并隔離這些區(qū)域,為下一步——OCR——做好了完美的準(zhǔn)備。

3. 在邊界框上運(yùn)行OCR

現(xiàn)在我們已經(jīng)用YOLO隔離了文本區(qū)域,我們可以在這些特定區(qū)域內(nèi)應(yīng)用OCR,與在整個(gè)圖像上運(yùn)行OCR相比,大大提高了準(zhǔn)確性:

import easyocr
# Initialize EasyOCR
reader = easyocr.Reader(['en'])
# Function to crop frames and perform OCR
def run_ocr_on_boxes(frame, boxes):
    ocr_results = []
    for box in boxes:
        x1, y1, x2, y2 = map(int, box.xyxy[0].tolist())
        cropped_frame = frame[y1:y2, x1:x2]
        ocr_result = reader.readtext(cropped_frame)
        ocr_results.append(ocr_result)
    return ocr_results
# Perform OCR on detected bounding boxes
for result in results:
    ocr_results = run_ocr_on_boxes(frame, result.boxes)
    # Extract and display the text from OCR results
    extracted_text = [detection[1] for ocr in ocr_results for detection in ocr]
    print(f"Extracted Text: {', '.join(extracted_text)}")
'THE, SECRET, HISTORY, DONNA, TARTT'

結(jié)果明顯改善,因?yàn)镺CR引擎現(xiàn)在只處理被特別識(shí)別為包含文本的區(qū)域,減少了從無(wú)關(guān)圖像元素中誤解的風(fēng)險(xiǎn)。

4. 使用Ollama改進(jìn)文本

使用easyocr提取文本后,Llama 3可以進(jìn)一步通過(guò)完善通常不完美和混亂的結(jié)果。OCR功能強(qiáng)大,但它仍然可能誤解文本或返回?zé)o序的數(shù)據(jù),特別是書籍標(biāo)題或作者名稱。LLM介入整理輸出,將原始OCR結(jié)果轉(zhuǎn)化為結(jié)構(gòu)化、連貫的文本。通過(guò)用特定提示引導(dǎo)Llama 3來(lái)識(shí)別和組織內(nèi)容,我們可以將不完美的OCR數(shù)據(jù)完善為整潔格式化的書籍標(biāo)題和作者名稱。最好的部分?你可以使用Ollama在本地運(yùn)行它!

import ollama
# Construct a prompt to clean up the OCR output
prompt = f"""
- Below is a text extracted from an OCR. The text contains mentions of famous books and their corresponding authors.
- Some words may be slightly misspelled or out of order.
- Your task is to identify the book titles and corresponding authors from the text.
- Output the text in the format: '<Name of the book> : <Name of the author>'.
- Do not generate any other text except the book title and the author.
TEXT:
{output_text}
"""
# Use Ollama to clean and structure the OCR output
response = ollama.chat(
    model="llama3",
    messages=[{"role": "user", "content": prompt}]
)
# Extract cleaned text
cleaned_text = response['message']['content'].strip()
print(cleaned_text)
The Secret History : Donna Tartt

一旦LLM清理了文本,拋光后的輸出可以存儲(chǔ)在數(shù)據(jù)庫(kù)中,或用于各種實(shí)際應(yīng)用,例如:

  • 數(shù)字圖書館或書店:自動(dòng)分類并顯示書籍標(biāo)題及其作者。
  • 檔案系統(tǒng):將掃描的書籍封面或文件轉(zhuǎn)換為可搜索的數(shù)字記錄。
  • 自動(dòng)元數(shù)據(jù)生成:根據(jù)提取的信息為圖像、PDF或其他數(shù)字資產(chǎn)生成元數(shù)據(jù)。
  • 數(shù)據(jù)庫(kù)輸入:將清理后的文本直接插入數(shù)據(jù)庫(kù),確保更大系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu)化和一致性。

通過(guò)結(jié)合對(duì)象檢測(cè)、OCR和LLMs,你解鎖了一個(gè)強(qiáng)大的管道,用于更結(jié)構(gòu)化的數(shù)據(jù)處理,非常適合需要高精度的應(yīng)用。

結(jié)論

你可以通過(guò)結(jié)合自定義訓(xùn)練的YOLOv10模型和EasyOCR,并使用LLM增強(qiáng)結(jié)果,顯著改進(jìn)文本識(shí)別工作流程。無(wú)論你是在處理棘手的圖像或視頻中的文本,清理OCR混亂,還是使一切超級(jí)拋光,這個(gè)管道都能為你提供實(shí)時(shí)、激光精確的文本提取和細(xì)化。

完整代碼:https://github.com/tapanBabbar9/yolov10/tree/main/book-cover

責(zé)任編輯:趙寧寧 來(lái)源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2024-12-03 15:25:27

2024-08-22 12:49:02

2024-05-08 17:05:44

2025-01-21 11:41:14

2024-05-29 09:25:38

2025-02-07 14:52:11

2024-10-07 11:12:55

2024-05-27 09:27:02

2024-05-28 14:46:00

2019-06-10 10:08:16

Windows 10Windows鼠標(biāo)指針

2015-02-12 15:33:43

微信SDK

2024-10-16 16:49:44

定向邊界框目標(biāo)檢測(cè)YOLOv8

2024-10-29 15:45:00

目標(biāo)檢測(cè)模型

2024-10-25 08:30:57

計(jì)算機(jī)視覺(jué)神經(jīng)網(wǎng)絡(luò)YOLOv8模型

2019-08-22 13:40:27

GNOME 3桌面

2024-05-16 09:20:29

OllamaLlama3框架

2015-02-12 15:38:26

微信SDK

2011-05-23 14:47:12

WordPress

2015-11-27 14:04:00

微軟Windows 10

2023-06-28 08:05:46

場(chǎng)景vue3自定義
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)