Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม擷取เฟรมจากวิดีโอด้วย OpenCV ใน Python

OpenCV (Open Source Computer Vision) เป็นไลบรารีโอเพนซอร์สที่พัฒนาสำหรับ machine learning และ computer vision ให้โครงสร้างพื้นฐานทั่วไปสำหรับแอปพลิเคชัน computer vision และเร่งการใช้ machine learning ในผลิตภัณฑ์เชิงพาณิชย์

มีอัลกอริทึมที่เพิ่มประสิทธิภาพมากกว่า 2,500 ตัวสำหรับ computer vision และ machine learning ทั้งแบบคลาสสิกและ state-of-the-art ใช้ได้หลายวัตถุประสงค์ รวมถึง การตรวจจับและจดจำใบหน้า, ระบุวัตถุ, จำแนกการกระทำของมนุษย์ในวิดีโอ, ติดตามการเคลื่อนไหวของกล้อง, รวมภาพเพื่อสร้างภาพความละเอียดสูงของฉากทั้งหมด และอื่นๆ

ในแบบฝึกหัดนี้จะนำไปใช้งานการประมวลผลวิดีโอเฟรมต่อเฟรม วิดีโออินพุตสามารถเป็นวิดีโอจากกล้องสดหรือวิดีโอที่จัดเก็บในเครื่องท้องถิ่น จะสร้างเฟรมจากวิดีโอที่จัดเก็บในเครื่องแล้วจัดเก็บเฟรมไว้ในดิสก์ท้องถิ่น

เนื่องจาก opencv ไม่ใช่ไลบรารีมาตรฐานของ Python จึงต้องติดตั้ง สามารถติดตั้งได้ง่ายด้วย pip:

pip install opencv-python
Collecting opencv-python
Downloading https://files.pythonhosted.org/packages/49/4b/ad55a2e2c309fb698e1283e687129e0892c7864de9a4424c4ff01ba0a3bb/opencv_python-4.0.0.21-cp36-cp36m-win32.whl (22.1MB)
100% |████████████████████████████████| 22.1MB 141kB/s
Requirement already satisfied: numpy>=1.11.3 in c:\python\python361\lib\site-packages (from opencv-python) (1.13.0)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.0.0.21

ไฟล์วิดีโอของฉันจัดเก็บในไดรฟ์ F: ซึ่งต้องการแปลงเป็นเฟรม (thumbnail) แล้วจัดเก็บเฟรมในตำแหน่งที่เลือก

โปรแกรม擷取เฟรมจากวิดีโอด้วย OpenCV ใน Python

โค้ด: โปรแกรมอ่านไฟล์วิดีโอและ擷取เฟรมจากมัน

# Import libraries
import cv2
import os

# Function to extract frames
def extractFrames(pathIn, pathOut):
    # directory path, where my video images will be stored
    os.mkdir(r'c:/users/rajesh/Desktop/data')
    
    # Capture video from video file
    cap = cv2.VideoCapture(pathIn)
    
    # Counter Variable
    count = 0
    
    while (cap.isOpened()):
        # Capture frame-by-frame
        ret, frame = cap.read()
        
        if ret == True:
            print('Read %d frame: ' % count, ret)
            # save frame as JPEG file
            cv2.imwrite(os.path.join(pathOut, "frame{:d}.jpg".format(count)), frame)
            count += 1
        else:
            break
    
    # When everything done, release the capture
    cap.release()
    cv2.destroyAllWindows()

def main():
    extractFrames(r'f:/I Miss You.mp4', 'data')

if __name__ == "__main__":
    main()

ผลลัพธ์

เห็นโฟลเดอร์ data ถูกสร้างบนเดสก์ท็อป (เส้นทางปลายทาง) และเฟรมจากวิดีโอถูกจัดเก็บภายในโฟลเดอร์

โปรแกรม擷取เฟรมจากวิดีโอด้วย OpenCV ใน Python