У меня проблема с Python, связанная с распознаванием меток времени/наложений GPS из видеофайлов.
Видеофайлы содержат кадры с камеры, на которых изображены луга с водорослями (см. прикрепленный снимок экрана).
Я хотел бы извлечь дату + время (левая часть кадра), одиночный символ (середина кадра) и координаты (правая часть кадра) и экспортировать их в формате CSV.
Я готов новичок в Python, но сумел вместе с моим другом пообщаться в GPT, чтобы получить сценарий с использованием Tesseract, который пытается выполнить именно это.
Я пробовал различные этапы предварительной обработки, но в конце концов я получил наилучшие результаты, если предварительная обработка ограничивается масштабированием на коэффициент 2 и повышением резкости.
Но CSV по-прежнему содержит много ошибок (см. Выходной CSV).
Особенно 0 против 8, / против 7 или даже различной длины строки являются обычным явлением.
С моей точки зрения «новичка» задача не кажется слишком сложной, потому что, как человек, я вполне способен читать числа без неправильной интерпретации.
Может быть, кто-то уже сталкивался с подобной проблемой и может помочь мне с лучшим сценарием?
Заранее большое спасибо и всего наилучшего!
Филипп
Вот сценарий:
import cv2
import pytesseract
import csv
import os
import numpy as np
# Falls nötig (Windows)
pytesseract.pytesseract.tesseract_cmd = r"C:\Users\Anwender\AppData\Local\Programs\Tesseract-OCR\tesseract.exe"
# Pfade
VIDEO_PATH = "2026-01-03 14-04-48.mp4"
OUTPUT_CSV = "ocr_output_scaled_sharpened.csv"
DEBUG_FOLDER = "ocr_debug_scaled_sharpened"
os.makedirs(DEBUG_FOLDER, exist_ok=True)
# Video laden
cap = cv2.VideoCapture(VIDEO_PATH)
fps = cap.get(cv2.CAP_PROP_FPS)
FRAME_INTERVAL = int(fps) # OCR auf ca. 1 Frame pro Sekunde
# ROIs: (x, y, width, height)
ROI_DATETIME = (12, 844, 246, 16)
ROI_LETTER = (795, 815, 50, 50)
ROI_GPS = (1131, 844, 337, 17)
# Skalierungsfaktor
SCALE_FACTOR = 2 # 2x Vergrößerung
# Schärfungs-Kernel
SHARPEN_KERNEL = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
def scale_and_sharpen(img, scale_factor=SCALE_FACTOR):
"""Skaliert das Bild hoch und schärft es nach."""
# Hochskalieren
img_scaled = cv2.resize(img, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_CUBIC)
# Nachschärfen
img_sharpened = cv2.filter2D(img_scaled, -1, SHARPEN_KERNEL)
return img_sharpened
# CSV-Datei öffnen
with open(OUTPUT_CSV, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["frame", "datetime", "letter", "coordinates"]) # Header korrekt geschlossen
frame_id = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame_id += 1
# OCR nur auf jedem FRAME_INTERVAL. Spart Zeit
if frame_id % FRAME_INTERVAL != 0:
continue
# ROIs ausschneiden
dt_img = frame[
ROI_DATETIME[1]:ROI_DATETIME[1]+ROI_DATETIME[3],
ROI_DATETIME[0]:ROI_DATETIME[0]+ROI_DATETIME[2]
]
letter_img = frame[
ROI_LETTER[1]:ROI_LETTER[1]+ROI_LETTER[3],
ROI_LETTER[0]:ROI_LETTER[0]+ROI_LETTER[2]
]
gps_img = frame[
ROI_GPS[1]:ROI_GPS[1]+ROI_GPS[3],
ROI_GPS[0]:ROI_GPS[0]+ROI_GPS[2]
]
# Skalieren + Nachschärfen
dt_img_proc = scale_and_sharpen(dt_img)
letter_img_proc = scale_and_sharpen(letter_img)
gps_img_proc = scale_and_sharpen(gps_img)
# Debug-Bilder speichern
cv2.imwrite(os.path.join(DEBUG_FOLDER, f"dt_{frame_id}.png"), dt_img_proc)
cv2.imwrite(os.path.join(DEBUG_FOLDER, f"letter_{frame_id}.png"), letter_img_proc)
cv2.imwrite(os.path.join(DEBUG_FOLDER, f"gps_{frame_id}.png"), gps_img_proc)
# OCR
datetime_text = pytesseract.image_to_string(
dt_img_proc,
config="--psm 7 -c tessedit_char_whitelist=0123456789:/.-"
).strip()
letter_text = pytesseract.image_to_string(
letter_img_proc,
config="--psm 10 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
).strip()
gps_text = pytesseract.image_to_string(
gps_img_proc,
config="--psm 7 -c tessedit_char_whitelist=0123456789.NSEW,-"
).strip()
# In CSV schreiben
writer.writerow([frame_id, datetime_text, letter_text, gps_text])
cap.release()
print("OCR abgeschlossen. Debug-Bilder im Ordner:", DEBUG_FOLDER)
Подробнее здесь: https://stackoverflow.com/questions/798 ... ideo-frame
Python OCR Tesseract: извлечение меток времени и координат из видеокадров ⇐ Python
Программы на Python
1767779653
Anonymous
У меня проблема с Python, связанная с распознаванием меток времени/наложений GPS из видеофайлов.
Видеофайлы содержат кадры с камеры, на которых изображены луга с водорослями (см. прикрепленный снимок экрана).
Я хотел бы извлечь дату + время (левая часть кадра), одиночный символ (середина кадра) и координаты (правая часть кадра) и экспортировать их в формате CSV.
Я готов новичок в Python, но сумел вместе с моим другом пообщаться в GPT, чтобы получить сценарий с использованием Tesseract, который пытается выполнить именно это.
Я пробовал различные этапы предварительной обработки, но в конце концов я получил наилучшие результаты, если предварительная обработка ограничивается масштабированием на коэффициент 2 и повышением резкости.
Но CSV по-прежнему содержит много ошибок (см. Выходной CSV).
Особенно 0 против 8, / против 7 или даже различной длины строки являются обычным явлением.
С моей точки зрения «новичка» задача не кажется слишком сложной, потому что, как человек, я вполне способен читать числа без неправильной интерпретации.
Может быть, кто-то уже сталкивался с подобной проблемой и может помочь мне с лучшим сценарием?
Заранее большое спасибо и всего наилучшего!
Филипп
Вот сценарий:
import cv2
import pytesseract
import csv
import os
import numpy as np
# Falls nötig (Windows)
pytesseract.pytesseract.tesseract_cmd = r"C:\Users\Anwender\AppData\Local\Programs\Tesseract-OCR\tesseract.exe"
# Pfade
VIDEO_PATH = "2026-01-03 14-04-48.mp4"
OUTPUT_CSV = "ocr_output_scaled_sharpened.csv"
DEBUG_FOLDER = "ocr_debug_scaled_sharpened"
os.makedirs(DEBUG_FOLDER, exist_ok=True)
# Video laden
cap = cv2.VideoCapture(VIDEO_PATH)
fps = cap.get(cv2.CAP_PROP_FPS)
FRAME_INTERVAL = int(fps) # OCR auf ca. 1 Frame pro Sekunde
# ROIs: (x, y, width, height)
ROI_DATETIME = (12, 844, 246, 16)
ROI_LETTER = (795, 815, 50, 50)
ROI_GPS = (1131, 844, 337, 17)
# Skalierungsfaktor
SCALE_FACTOR = 2 # 2x Vergrößerung
# Schärfungs-Kernel
SHARPEN_KERNEL = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
def scale_and_sharpen(img, scale_factor=SCALE_FACTOR):
"""Skaliert das Bild hoch und schärft es nach."""
# Hochskalieren
img_scaled = cv2.resize(img, None, fx=scale_factor, fy=scale_factor, interpolation=cv2.INTER_CUBIC)
# Nachschärfen
img_sharpened = cv2.filter2D(img_scaled, -1, SHARPEN_KERNEL)
return img_sharpened
# CSV-Datei öffnen
with open(OUTPUT_CSV, "w", newline="", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["frame", "datetime", "letter", "coordinates"]) # Header korrekt geschlossen
frame_id = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame_id += 1
# OCR nur auf jedem FRAME_INTERVAL. Spart Zeit
if frame_id % FRAME_INTERVAL != 0:
continue
# ROIs ausschneiden
dt_img = frame[
ROI_DATETIME[1]:ROI_DATETIME[1]+ROI_DATETIME[3],
ROI_DATETIME[0]:ROI_DATETIME[0]+ROI_DATETIME[2]
]
letter_img = frame[
ROI_LETTER[1]:ROI_LETTER[1]+ROI_LETTER[3],
ROI_LETTER[0]:ROI_LETTER[0]+ROI_LETTER[2]
]
gps_img = frame[
ROI_GPS[1]:ROI_GPS[1]+ROI_GPS[3],
ROI_GPS[0]:ROI_GPS[0]+ROI_GPS[2]
]
# Skalieren + Nachschärfen
dt_img_proc = scale_and_sharpen(dt_img)
letter_img_proc = scale_and_sharpen(letter_img)
gps_img_proc = scale_and_sharpen(gps_img)
# Debug-Bilder speichern
cv2.imwrite(os.path.join(DEBUG_FOLDER, f"dt_{frame_id}.png"), dt_img_proc)
cv2.imwrite(os.path.join(DEBUG_FOLDER, f"letter_{frame_id}.png"), letter_img_proc)
cv2.imwrite(os.path.join(DEBUG_FOLDER, f"gps_{frame_id}.png"), gps_img_proc)
# OCR
datetime_text = pytesseract.image_to_string(
dt_img_proc,
config="--psm 7 -c tessedit_char_whitelist=0123456789:/.-"
).strip()
letter_text = pytesseract.image_to_string(
letter_img_proc,
config="--psm 10 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
).strip()
gps_text = pytesseract.image_to_string(
gps_img_proc,
config="--psm 7 -c tessedit_char_whitelist=0123456789.NSEW,-"
).strip()
# In CSV schreiben
writer.writerow([frame_id, datetime_text, letter_text, gps_text])
cap.release()
print("OCR abgeschlossen. Debug-Bilder im Ordner:", DEBUG_FOLDER)
Подробнее здесь: [url]https://stackoverflow.com/questions/79862282/python-ocr-tesseract-extraction-of-time-stamps-and-coordinates-from-video-frame[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия