15 changed files with 120 additions and 226 deletions
@ -0,0 +1,2 @@ |
|||||
|
import subprocess |
||||
|
subprocess.Popen(["python", "main.py"]) |
@ -1,133 +0,0 @@ |
|||||
from ultralytics import YOLO |
|
||||
import numpy as np |
|
||||
import cv2 |
|
||||
from paddleocr import PaddleOCR |
|
||||
import re |
|
||||
import os |
|
||||
current_dir = os.path.dirname(os.path.abspath(__file__)) |
|
||||
img_path = os.path.join(current_dir, "test1.jpg") |
|
||||
img = cv2.imread(img_path) |
|
||||
model = YOLO(os.path.join(current_dir, "best.pt")) |
|
||||
results = model.predict(img_path, device='cpu') |
|
||||
ocr = PaddleOCR( |
|
||||
use_gpu=False, |
|
||||
use_angle_cls=True, |
|
||||
det_model_dir=os.path.join(current_dir, "ocr/simple/ch_PP-OCRv4_det_infer"), |
|
||||
rec_model_dir=os.path.join(current_dir, "ocr/simple/ch_PP-OCRv4_rec_infer"),) |
|
||||
|
|
||||
for r in results: |
|
||||
boxes = r.boxes |
|
||||
clses = np.array(boxes.cls).astype(int) |
|
||||
points = np.array(boxes.xyxy).astype(int) |
|
||||
target_0 = [] |
|
||||
target_1 = [] |
|
||||
target_2 = [] |
|
||||
target_3 = [] |
|
||||
for cls, point in zip(clses, points): |
|
||||
if cls == 0: |
|
||||
target_0.append(point) |
|
||||
elif cls == 1: |
|
||||
target_1.append(point) |
|
||||
elif cls == 2: |
|
||||
target_2.append(point) |
|
||||
elif cls == 3: |
|
||||
target_3.append(point) |
|
||||
|
|
||||
# 初始化结果字典 |
|
||||
results_summary = { |
|
||||
'target_0': [], |
|
||||
'target_1': [], |
|
||||
'target_2': [], |
|
||||
'target_3': [] |
|
||||
} |
|
||||
|
|
||||
# 检查类别数量 |
|
||||
if (len(target_0) == 2 and len(target_1) == 1 and (len(target_2) == 1 or len(target_2) == 2) and len(target_3) == 2): |
|
||||
|
|
||||
# 处理类别0 |
|
||||
target_0 = sorted(target_0, key=lambda x: x[0]) |
|
||||
left_point = target_0[0] |
|
||||
right_point = target_0[1] |
|
||||
for target, name in zip([left_point, right_point], ['地址', '姓名']): |
|
||||
target_img = img[target[1]:target[3], target[0]:target[2]] |
|
||||
cv2.imwrite(f'{name}.jpg', target_img) |
|
||||
result = ocr.ocr(target_img) |
|
||||
out = '' |
|
||||
if not result or not any(result): |
|
||||
out = '未识别到文字' |
|
||||
else: |
|
||||
for lines in result: |
|
||||
for line in lines: |
|
||||
out += line[1][0] |
|
||||
results_summary['target_0'].append(f"{name.capitalize()}: {out}") |
|
||||
|
|
||||
# # 处理类别1 |
|
||||
# for target in target_1: |
|
||||
# target_img = img[target[1]:target[3], target[0]:target[2]] |
|
||||
# cv2.imwrite(f'当前有功.jpg', target_img) |
|
||||
# result = ocr.ocr(target_img) |
|
||||
# out = '' |
|
||||
# for lines in result: |
|
||||
# for line in lines: |
|
||||
# out += line[1][0] |
|
||||
# out = out[:-2] + '.' + out[-2:] |
|
||||
# results_summary['target_1'].append(f"当前有功: {out}") |
|
||||
|
|
||||
# 处理类别1 |
|
||||
for target in target_1: |
|
||||
target_img = img[target[1]-5:target[3]+5, target[0]-5:target[2]+5] |
|
||||
cv2.imwrite(f'当前有功.jpg', target_img) |
|
||||
result = ocr.ocr(target_img, det=False) |
|
||||
for lines in result: |
|
||||
for line in lines: |
|
||||
out = line[0] |
|
||||
out = re.sub(r'\.', '', out) |
|
||||
out = out[:-2] + '.' + out[-2:] |
|
||||
results_summary['target_1'].append(f"当前有功: {out}") |
|
||||
|
|
||||
# 处理类别2 |
|
||||
if len(target_2) == 2: |
|
||||
target_2_sorted = sorted(target_2, key=lambda x: x[1]) |
|
||||
top_target = target_2_sorted[0] |
|
||||
target_img = img[top_target[1]:top_target[3], top_target[0]:top_target[2]] |
|
||||
elif len(target_2) == 1: |
|
||||
top_target = target_2[0] |
|
||||
target_img = img[top_target[1]:top_target[3], top_target[0]:top_target[2]] |
|
||||
cv2.imwrite(f'电表资产号.jpg', target_img) |
|
||||
result = ocr.ocr(target_img) |
|
||||
longest_line = "" |
|
||||
max_length = 0 |
|
||||
for lines in result: |
|
||||
for line in lines: |
|
||||
text = line[1][0] |
|
||||
if len(text) > max_length: |
|
||||
longest_line = text |
|
||||
max_length = len(text) |
|
||||
results_summary['target_2'].append(f"电表资产号: {longest_line}") |
|
||||
|
|
||||
# 处理类别3 |
|
||||
target_3 = sorted(target_3, key=lambda x: x[0]) |
|
||||
left_point = target_3[0] |
|
||||
right_point = target_3[1] |
|
||||
for target, name in zip([left_point, right_point], ['封印1', '封印2']): |
|
||||
target_img = img[target[1]:target[3], target[0]:target[2]] |
|
||||
height, width = target_img.shape[:2] |
|
||||
if width <= height: |
|
||||
target_img = cv2.transpose(target_img) |
|
||||
target_img = cv2.flip(target_img, flipCode=1) |
|
||||
cv2.imwrite(f'{name}.jpg', target_img) |
|
||||
result = ocr.ocr(target_img) |
|
||||
out = '' |
|
||||
for lines in result: |
|
||||
for line in lines: |
|
||||
out += line[1][0] |
|
||||
results_summary['target_3'].append(f"{name.capitalize()}: {out}") |
|
||||
|
|
||||
for category, result_list in results_summary.items(): |
|
||||
for result in result_list: |
|
||||
print(result) |
|
||||
else: |
|
||||
print("图像不清晰或要素不全请重新拍摄或人工记录") |
|
||||
|
|
||||
|
|
||||
|
|
Before Width: | Height: | Size: 4.7 MiB After Width: | Height: | Size: 4.3 MiB |
@ -0,0 +1,4 @@ |
|||||
|
@echo off |
||||
|
cd E:\code\code |
||||
|
python main.py start |
||||
|
exit |
@ -0,0 +1,3 @@ |
|||||
|
DIM objShell |
||||
|
set objShell = wscript.createObject("wscript.shell") |
||||
|
iReturn = objShell.Run("start.bat", 0, TRUE) |
@ -0,0 +1,6 @@ |
|||||
|
import Dexie from 'dexie'; |
||||
|
|
||||
|
export const myDatabase = new Dexie('myDatabase'); |
||||
|
myDatabase.version(1).stores({ |
||||
|
users: '++id, Name,Address, lastPower,currentMeterId,Qrcode1,qrcode1,create_at,update_at', // Primary key and indexed props
|
||||
|
}); |
Loading…
Reference in new issue