ดังที่ฉันได้อธิบายไว้ในรายละเอียดในการสอนบล็อกนี้เกี่ยวกับวิธีการสร้างโครงการนี้ด้วยคำอธิบายและตัวอย่างรหัส
| ไดเรกทอรีวิดีโอ | ไดเรกทอรีภาพสกัด |
|---|---|
![]() | ![]() |
| วนซ้ำวิดีโอทั้งหมดภายในไดเรกทอรี | แยกเฟรม (หลังจากการปรับแต่ง (ช่วงเวลาที่ต้องการ (ในวินาที) ระหว่างเฟรมที่แยกออกมาเริ่มหลังจาก (วินาทีที่ต้องการ) ฯลฯ ) |
Extractor เฟรมวิดีโอเป็นสคริปต์ Python ที่ช่วยให้คุณสามารถแยกเฟรมที่วนซ้ำได้มากกว่าไฟล์วิดีโอทั้งหมดจากไดเรกทอรีและบันทึกเป็นไฟล์รูปภาพแต่ละไฟล์ในไดเรกทอรีสองไดเรกทอรีที่แตกต่างกัน: หนึ่งสำหรับเฟรมขนาดดั้งเดิมและอีกเฟรมสำหรับเฟรมที่ปรับขนาด สคริปต์ใช้แพ็คเกจ OpenCV และ IMUTILS Python สำหรับการประมวลผลภาพและแพ็คเกจ Fire Python สำหรับอินเทอร์เฟซบรรทัดคำสั่งที่เรียบง่าย
สคริปต์นี้ช่วยให้คุณสามารถแยกเฟรมออกจากวิดีโอในอัตราที่กำหนด โดยการระบุช่วงเวลาที่ต้องการ (เป็นวินาที) ระหว่างเฟรมที่แยกออกมาคุณสามารถสร้างชุดข้อมูลขนาดใหญ่ของภาพสำหรับการตรวจจับวัตถุการจำแนกภาพหรืองานการมองเห็นคอมพิวเตอร์อื่น ๆ
สำหรับคำอธิบายประกอบภาพมักจำเป็นต้องแยกเฟรมออกจากวิดีโอ แอปพลิเคชั่นนี้ทำให้ง่ายต่อการสร้างชุดข้อมูลขนาดใหญ่ของรูปภาพสำหรับการตรวจจับการฝึกอบรมวัตถุหรือรูปแบบการจำแนกรูปภาพแม้ว่าข้อมูลของคุณจะเริ่มต้นในรูปแบบของวิดีโอ
ด้วยการทำให้กระบวนการแยกเฟรมเป็นแบบอัตโนมัติสำหรับการวนซ้ำไฟล์วิดีโอทั้งหมดภายในไดเรกทอรีแอพนี้จะช่วยให้คุณประหยัดเวลาและความพยายามเมื่อเทียบกับการสกัดเฟรมด้วยตนเองจากแต่ละไฟล์วิดีโอ
หวังว่าคุณจะพบว่าตัวแยกเฟรมวิดีโอมีประโยชน์สำหรับโครงการวิสัยทัศน์คอมพิวเตอร์ของคุณ!
ในการใช้ตัวแยกเฟรมวิดีโอคุณต้องเรียกใช้สคริปต์ frame_extractor.py Python พร้อมอาร์กิวเมนต์ต่อไปนี้:
vid_dir : เส้นทางไปยังไดเรกทอรีที่มีไฟล์วิดีโอที่คุณต้องการแยกเฟรมจากout_dir : เส้นทางไปยังไดเรกทอรีที่คุณต้องการบันทึกเฟรมที่แยกออกมาimg_frmt (ไม่บังคับ): รูปแบบภาพเพื่อบันทึกเฟรมที่แยกออกมาค่าเริ่มต้นคือ JPGrequired_frame_rate (ไม่บังคับ): จำนวนเฟรมที่จะแยกต่อวินาที ค่าเริ่มต้นคือ 1start_from_seconds (ไม่บังคับ): จำนวนวินาทีที่จะเริ่มแยกเฟรม ค่าเริ่มต้นคือ 0แอพจะแยกเฟรมจากวิดีโอทั้งหมดในไดเรกทอรีที่ระบุและบันทึกลงในไดเรกทอรีเอาต์พุต
แทนที่จะส่งอาร์กิวเมนต์ทุกครั้งที่คุณเรียกใช้แอพนี้คุณสามารถเพิ่มอาร์กิวเมนต์เหล่านี้ภายในไฟล์ settings.py การตั้งค่า
python frame_extractor_multithread.py ในการใช้ตัวแยกเฟรมวิดีโอคุณต้องติดตั้ง Python 3 และแพ็คเกจ Python ต่อไปนี้:
คุณสามารถติดตั้งแพ็คเกจเหล่านี้โดยใช้ PIP โดยเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
pip install opencv-python imutils fire python frame_extractor . py - - help python frame_extractor . py - - vid_dir = [ vid_dir ] - - out_dir = [ out_dir ] - - img_frmt = [ img_frmt ] - - required_frame_rate = [ required_frame_rate ] - - start_from_seconds = [ start_from_seconds ] กระบวนการสกัดสำหรับวิดีโอทั้งหมดใน vid_dir จะเริ่มต้นและเฟรมที่แยกออกมาจะถูกบันทึกลงใน out_dir
สมมติว่าคุณมีไฟล์วิดีโอที่เรียกว่า my_video.mp4 ที่อยู่ในไดเรกทอรี/path/to/video และคุณต้องการแยกเฟรมออกจากมันและบันทึกไว้ในไดเรกทอรี/path/to/output ด้วยอัตราเฟรม 2 เฟรมต่อ วินาทีและเริ่มต้นจาก 10 วินาทีในวิดีโอ คุณสามารถเรียกใช้คำสั่งต่อไปนี้:
python frame_extractor . py - - vid_dir = / path / to / video - - out_dir = / path / to / output - - required_frame_rate = 2 - - start_from_seconds = 10สคริปต์จะแยกเฟรมจาก my_video.mp4, บันทึกเฟรมขนาดดั้งเดิมใน/path/to/output/orig_size_frames และเฟรมที่ปรับขนาดใน/path/to/out/out/re_size_frames เฟรมที่แยกออกมาจะถูกบันทึกในรูปแบบ JPEG โดยมีชื่อไฟล์ของแบบฟอร์ม my_video_1.jpg, my_video_2.jpg และอื่น ๆ
หรือคุณสามารถแก้ไขไฟล์ settings.py และ frame_extractor.py จะยอมรับอาร์กิวเมนต์จากที่นี่
ตัวอย่างเช่น:
แก้ไขการตั้งค่าที่ต้องการใน settings.py
# If you don't want to pass too many arguments every time you can modify the settings here.
# And the script will accept the setting from this file every time you run
# 'python extract_frames.py'
# Video file
VIDEO_DIRPATH = ROOT / 'videos' # EDIT: 1 (Required)
# Frame settings
REQUIRED_FRAME_RATE = 2 # EDIT: 2
# Number of seconds for a frame. For example: 0.5 means, 1 frame after 0.5 seconds pass
START_FROM_SECOND = 1 # EDIT: 3
# For example: 2 means, start extraction of the frames after 2 seconds of the video is passed.
REQUIRED_IMAGE_FORMAT = 'jpg' # EDIT: 4
REQUIRED_IMAGE_WIDTH = 720 # EDIT: 5
# Output frames dirpath
OUTDIR = BASE_ROOT / 'skyscraper' # EDIT: 6 (Required) หากคุณพบว่ารหัส Python ของฉันมีประโยชน์ให้พิจารณาให้เป็นดาว
สำหรับปัญหาใด ๆ เกี่ยวกับแอพหรือมีข้อเสนอแนะหรือข้อเสนอแนะสำหรับการปรับปรุง โปรดยกประเด็นปัญหา
ตัวแยกเฟรมวิดีโอได้รับใบอนุญาตภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับรายละเอียด