Spaces:
Sleeping
Sleeping
import os | |
from typing import Tuple, List | |
import cv2 | |
from multiprocessing import Pool | |
def extract_frames(video_path: str, output_folder: str, filename: str) -> None: | |
""" | |
Freymlarni videodan olish va rasm shaklda saqlash | |
Parameters | |
---------- | |
video_path : str | |
video fayl joyi | |
output_folder : str | |
rasm saqlanadigan joy | |
filename : str | |
video fayl nomi | |
Examples | |
-------- | |
>>> extract_frames("/video/joyi/video.mp4", "/rasm/joyi/output/", "video.mp4") | |
""" | |
vidcap = cv2.VideoCapture(video_path) | |
success, image = vidcap.read() | |
count = 0 | |
while success: | |
image = cv2.resize(image, (image.shape[1] // 2, image.shape[0] // 2)) | |
p = os.path.join(output_folder, f"frame_{count:06}_{filename.removesuffix('.mp4')}.jpg") | |
if cv2.imwrite(p, image): | |
print("saved:", p) | |
else: | |
print("Not saved") | |
success, image = vidcap.read() | |
count += 1 | |
def prepare_tasks(root: str, save_path: str, folders: List[str]) -> List[Tuple[str, str, str]]: | |
""" | |
Parallel videolarni protsess qilish uchun topshiriqlarni tayyorlaydi | |
Parameters | |
---------- | |
root : str | |
Videolar joyi | |
save_path : str | |
freym (rasm)lar saqlanadigan joy | |
folders : List[str] | |
Videolar joyi | |
Returns | |
------- | |
tasks : List[Tuple[str, str, str]] | |
topshiriqlar, har bir topshiriqda quyidagilar bo'ladi. | |
[video_path, output_folder, and filename. | |
Examples | |
-------- | |
>>> prepare_tasks("/joy/root", "/joy/save", ["folder1", "folder2"]) | |
""" | |
tasks = [] | |
for folder in folders: | |
for filename in os.listdir(os.path.join(root, folder)): | |
if filename.endswith('.mp4'): | |
tasks.append((os.path.join(root, folder, filename), f'{save_path}/' + folder, filename)) | |
return tasks | |
def process_videos(root: str, save_path: str, folders: List[str], pool_size: int) -> None: | |
""" | |
Parallel ravishda hamma videolarni protsess qilish | |
Parameters | |
---------- | |
root : str | |
video joyi | |
save_path : str | |
Freymlar sqalanadigan joy | |
folders : List[str] | |
Videolarni saqlaydigan joy | |
pool_size : int | |
paralel ishlash o'lchami | |
Examples | |
-------- | |
>>> process_videos("/joy/root", "/joy/save", ["folder1", "folder2"], 4) | |
""" | |
tasks = prepare_tasks(root, save_path, folders) | |
with Pool(pool_size) as p: | |
p.map(extract_frames, tasks) | |
root = 'traffic_laws/data/chiziqni-kesish/' | |
save_path = "traffic_laws/data/classification/" | |
folders = ['good', 'problem'] | |
# Start the process | |
process_videos(root, save_path, folders, pool_size=16) | |