ドラレコの画像からナンバープレート認識
Q&A
解決したいこと
ドラレコから取得した画像から、ナンバーを認識させて、output.txtに保存したい感じなのですが、分からなくなってしまったため質問させていただきます。
発生している問題・エラー
image 1/1 C:\Users\corei\OneDrive\画像\スクリーンショット\スクリーンショット 2025-01-30 210546.png: 576x640 1 truck, 96.4ms
Speed: 2.5ms preprocess, 96.4ms inference, 18.5ms postprocess per image at shape (1, 3, 576, 640)
Traceback (most recent call last):
File "C:\Users\corei\OneDrive\デスクトップ\ナンバープレート\1.py", line 41, in <module>
x1, y1, x2, y2 = box.xyxy.tolist()
ValueError: not enough values to unpack (expected 4, got 1)
該当するソースコード
import tkinter as tk
from tkinter import filedialog
from ultralytics import YOLO
import cv2
import numpy as np
from realesrgan.utils import RealESRGANer # 修正
from PIL import Image
import easyocr
import os
def select_image():
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(title="画像ファイルを選択", filetypes=[ ("All files", "*.*"),("JPEG", "*.jpg"), ("PNG", "*.png")])
return file_path
# YOLOv8モデルのロード
model = YOLO('yolov8n.pt')
# 画像の選択
image_path = select_image()
if not image_path:
print("画像が選択されませんでした。終了します。")
exit()
# 画像を読み込む
image = cv2.imread(image_path)
# YOLOモデルで推論
results = model(image_path)
# 出力ファイルのパス
output_path = './output.txt'
if not os.path.exists(output_path):
open(output_path, 'w', encoding='utf-8').close()
# 検出されたナンバープレートの処理
for result in results:
# 各検出ボックスに対して処理
for box in result.boxes:
x1, y1, x2, y2 = box.xyxy.tolist()
x1, y1, x2, y2 = map(int, [x1, y1, x2, y2])
# ナンバープレート部分を切り取る
plate_img = image[y1:y2, x1:x2]
plate_pil = Image.fromarray(cv2.cvtColor(plate_img, cv2.COLOR_BGR2RGB))
# RealESRGANを使って画像を補正
model_path = r'./weights/RealESRGAN_x4.pth' # モデルのパス
real_esrgan_model = RealESRGANer(scale=4, model_path=model_path) # モデルをロード
# 補正後の画像を保存
enhanced_plate = real_esrgan_model.enhance(plate_pil)
enhanced_plate.save("plate_enhanced.jpg")
enhanced_plate.show()
# OCRでナンバープレートの文字を認識
reader = easyocr.Reader(['ja', 'en'])
text_results = reader.readtext(np.array(enhanced_plate))
# 出力ファイルに結果を書き込み
with open(output_path, "a", encoding="utf-8") as f:
for (_, text, _) in text_results:
f.write(text + "\n")
print("✅ ナンバープレートの検出と認識が完了しました!")
print("認識されたテキスト:", text_results)
###フォルダ構成
ナンバープレートフォルダにpythonファイル、yolov8n.pt
weightsフォルダにRealESRGAN_x4.pth
コメント
本当に行き詰まってしまいました。
助けてください。
0