Saya sudah mendapatkan file biner (400MB) yang pertama ingin saya baca dan kemudian menulis ke file lain dengan python. Saat ini apa yang saya lakukan sangat mendasar.

file = 'file.bin'
with open('temp','wb+') as dest:
    for chunk in file.chunks():
        dest.write(chunk)

Kode ini adalah bagian dari aplikasi Django saya yang ingin saya percepat. Apakah ada cara lain yang lebih baik untuk mempercepat operasi ini?

Pembaruan: Baiklah, untuk memperjelas apa yang saya coba lakukan adalah memuat file video dalam memori (data biner) di OpenCV menggunakan cv2.VideoCapture (nama file) yang menurut saya tidak mungkin untuk sekarang. Jadi sekarang saya harus membaca file dari memori dan menulisnya ke disk sehingga operasi OpenCV dapat dilakukan. Pada dasarnya saya mencoba mendapatkan durasi video untuk tujuan validasi.

    import cv2
    cap = cv2.VideoCapture(dest.name)
    fps = cap.get(cv2.CAP_PROP_FPS)  
    frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    duration = frame_count/fps
-1
Anshul Singh 17 Juni 2020, 11:08

1 menjawab

Jawaban Terbaik

Mengerti setelah menderita selama berjam-jam. Tetapi jika Anda seorang programmer pemula, saya rasa Anda tidak dapat menghindarinya. Saya mencoba untuk mendapatkan jalur request.FILES dalam tampilan Django saya sehingga saya dapat menggunakannya di OpenCV VideoCapture. Jadi ini adalah bagaimana saya melakukannya.

file = request.FILES['filename'].file   
cap = cv2.VideoCapture(file.name)
fps = cap.get(cv2.CAP_PROP_FPS) 
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = frame_count/fps

Perbarui Juni/2020 Metode ini hanya akan berfungsi jika ukuran file Anda lebih dari 2,5 Mb. Untuk file yang kurang dari 2,5 Mb, Anda perlu menambahkan ini ke file settings.py Anda.

FILE_UPLOAD_HANDLERS = [
    'django.core.files.uploadhandler.TemporaryFileUploadHandler',
]
1
Anshul Singh 11 September 2020, 06:24