Spaces:
Runtime error
Runtime error
File size: 2,465 Bytes
76f34f5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
import cv2
import numpy as np
import os
os.makedirs('/app/.easyocr', exist_ok=True)
from inference_sdk import InferenceHTTPClient
# تعريف العميل
CLIENT = InferenceHTTPClient(
api_url="https://serverless.roboflow.com",
api_key="4m9tZRxBfEK8C4no7zsZ"
)
reader = easyocr.Reader(['en'], model_storage_directory='/app/.easyocr')
def detect_license_plate(image_path, model_id="license-plate-recognition-rxg4e/11"):
"""إجراء التنبؤ باستخدام نموذج Roboflow"""
result = CLIENT.infer(image_path, model_id=model_id)
return result
def extract_plate_from_image(image_path, predictions):
"""استخلاص صورة اللوحة من الصورة الكاملة بناءً على التنبؤات"""
image = cv2.imread(image_path)
max_confidence = 0
best_coords = None
for prediction in predictions['predictions']:
confidence = prediction['confidence']
if confidence > max_confidence:
max_confidence = confidence
x = int(prediction['x'])
y = int(prediction['y'])
width = int(prediction['width'])
height = int(prediction['height'])
x1 = int(x - width / 2)
y1 = int(y - height / 2)
x2 = int(x + width / 2)
y2 = int(y + height / 2)
best_coords = (x1, y1, x2, y2)
if not best_coords:
return None # لم يتم الكشف عن أي لوحة
x1, y1, x2, y2 = best_coords
polygon_points = np.array([
[x1, y1],
[x2, y1],
[x2, y2],
[x1, y2]
], dtype=np.int32)
mask = np.zeros(image.shape[:2], dtype=np.uint8)
cv2.fillPoly(mask, [polygon_points], 255)
masked_image = cv2.bitwise_and(image, image, mask=mask)
x, y, w, h = cv2.boundingRect(polygon_points)
cropped_plate = masked_image[y:y+h, x:x+w]
return cropped_plate
def enhance_image_for_ocr(image):
"""تحسين الصورة لاستخلاص النصوص باستخدام EasyOCR"""
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return gray
def extract_license_number(image):
"""استخراج الأرقام من صورة اللوحة"""
result = reader.readtext(image)
plate_numbers = []
for detection in result:
text = detection[1]
numbers_only = ''.join(c for c in text if c.isdigit())
if numbers_only:
plate_numbers.append(numbers_only)
return plate_numbers
|