Script untuk mengumpulkan kutipan dan mengenali teks dari video dengan Python

Posting tentang skrip yang mengunduh video dari youtube dan mengenali teks di dalamnya. Saya memutuskan untuk segera memulai dengan implementasi praktis. "Vdudictionary" - Kolektor skrip kumpulan kutipan pahlawan "Vdud" dengan Python. Yuri Dud dan proyeknya "Vdud" tidak perlu diperkenalkan. Wawancara terpanas yang menarik untuk ditonton. Yuri Alexandrovich tahu cara membuat acara yang menarik, terlepas dari apakah Anda tahu pahlawan masalah tertentu, adalah penggemarnya, atau untuk pertama kalinya mendengar nama ini.

Berapa cm yang Anda miliki? Apa yang kau katakan pada Putin? Apakah Anda mendengarkan OXY?


Ini dan banyak pertanyaan lainnya sekarang dikaitkan dengan Dudem. Ketika orang yang diwawancarai mengucapkan frasa yang penuh dengan kebijaksanaan, editor yang peduli hati-hati menampilkannya di layar monitor kami bersama Anda untuk menyampaikan seluruh poin kepada kami. Tujuan saya adalah untuk mengkristalkan kebijaksanaan generasi ini dan membuat kamus "Vdudexicon" atau "Vdudictionary".

Secara alami, seseorang, bahkan jika tidak dibebani dengan latar belakang IT tertentu, tidak harus mengumpulkan ucapan-ucapan ini dengan tangannya. Untuk ini, saya membuat sketsa skrip python.



Pertama-tama, kita membutuhkan file yang akan kita proses. Untuk mengunduh video dari Youtube, saya menggunakan modul pytube.

pip install pytube 

Contoh mengunduh file dari youtube

 from pytube import YouTube a=YouTube('https://www.youtube.com/watch?v=RNbXm8WKmow') a.streams.first().download() 

File telah diunduh. Sekarang kita akan mulai menentukan bingkai secara metodis dengan makna terkonsentrasi, dengan kebijaksanaan orang-orang sezaman, dengan perkataan para pahlawan zaman kita.



Tidak ada pelat persegi panjang dalam rilis yang lebih lama, jadi kami dapat mencari teks di bagian bawah layar. Dalam rilis baru, Anda dapat menggunakan OpenCV lama yang sama baik untuk mencari persegi panjang, yang akan memungkinkan Anda untuk mendapatkan bingkai dari video.

 a,contours,h = cv2.findContours(gray3, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for i in contours: cv2.drawContours(gray3,[i],0,(0,0,255),1) 

Untuk menginstal cv2 untuk python3 pada raspberry3 harus menginstal banyak paket karena ketergantungan. Mungkin beberapa paket berlebihan, ini karena saya kurang pengalaman, begitulah semuanya dimulai.

 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get -y install libopencv-dev sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm sudo apt-get -y install libtiff4-dev libjpeg-dev libjasper-dev sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev sudo apt-get -y install python-dev python-numpy sudo apt-get -y install libtbb-dev sudo apt-get -y install libqt4-dev libgtk2.0-dev sudo apt-get -y install libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev pip install opencv-python 

Kami menggunakan tesseract - ini adalah mesin OCR yang diperlukan untuk pengenalan teks optik.

 sudo apt-get install tesseract-ocr sudo pip3 install pytesseract sudo pip3 install tesseract 

Rilis ini menggunakan headset yang sangat spesifik, yang membuatnya sulit dikenali. Secara umum, kami memasang kamus untuk alfabet Cyrillic. Unduh dan transfer ke / usr / share / tesseract-ocr / tessdata.



Skrip pada input menerima alamat video di youtube. Ia mengunduh file, mulai memproses satu frame dalam 5 detik. Jika ada kotak di bingkai, hilangkan, ubah warna, tambah kontras dan kenali. Jika string kurang dari 15 karakter, jangan pertimbangkan itu. Anda dapat, tentu saja, menggunakan string kurang dari 15 karakter, tetapi seperti yang dikatakan salah satu tokoh utama program:
-Aku tidak tahu, nak, bagaimana kamu hidup dengan garis kecil.

Kami memasukkan teks file log, waktu dan tautan ke momen di youtube. Kami melewatkan 5 detik (jangan tanya mengapa angka ini pertama kali terlintas dalam pikiran, memeriksa tidak menemukan tumpang tindih dari dua kutipan dalam waktu ini). Anda dapat menghapus file video dan melanjutkan dengan rilis berikutnya.

Kode skrip lengkap:

Skrip Python 3
 import cv2 import pytesseract import numpy as np from pytube import YouTube import os nameofvideo="RNbXm8WKmow" a=YouTube('https://www.youtube.com/watch?v='+nameofvideo) a.streams.first().download() title=a.title title2=title.replace("/","").replace(",","").replace(".","")+".mp4" os.rename(title2, "youtubefile.mp4") print(title) f=open('/var/www/python/'+str(nameofvideo)+'.txt','w') f.write(title+"<br>") f.write('<table><tr><td></td><td></td><td></td></tr>') spisoksimvolovpodudalenie=["*","/","|","\\",")","(","}","{","+","`","~","№","",":","$","#","@","%","[","]","&","^","' "] def udaleniesimvolov(stroka): for element in spisoksimvolovpodudalenie: stroka=stroka.replace(element,"") return stroka vidcap = cv2.VideoCapture('youtubefile.mp4') vidcap.set(cv2.CAP_PROP_POS_AVI_RATIO,1) durationsec=int(vidcap.get(cv2.CAP_PROP_POS_MSEC)/1000) print("duration: "+str(durationsec)+" sec") for thissec in range(0,durationsec,5): vidcap.set(cv2.CAP_PROP_POS_MSEC,thissec*1000) success,image = vidcap.read() gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray2 = cv2.addWeighted( gray, 1.5, gray, 0, 0.5) gray3 = gray2[450:670,0:1280] if success: print(str(thissec)+" sec.") text = udaleniesimvolov(pytesseract.image_to_string(gray3, lang='rus')) if len(text)>15: print (text) f.write('<tr><td>'+str(thissec)+'</td><td>'+text+'</td><td><a href="https://www.youtube.com/watch?v='+nameofvideo+"&t="+str(thissec)+'"></a></td></tr>') print("----") f.write('</table>') f.close() 


Contoh skrip
Tolokonnikova - biseksualitas, WAJAH, penjara / vDud
Waktu c.Kutipan
95“AKTIFIS TIDAK HARUS MEMBenci MENTOBE.
MEREKA HARUS MENCOBA UNTUK MEMAHAMI,
BAHWA CENT YANG DISEBABKAN MENJADI CENT "
195PETER VERZILOV - PESERTA DI PUSSY RIOT
FORMER HUSBAND HARAPAN TOLOKONNIKOVA
255Ekaterina Samutsevich
570SAYA MENYUKAI rajutan!
595'vLADMTSR sorbyPn

990VERZILOV PETER DALAM MUDA HIDUP DI JEPANG BERSAMA DENGAN ORANG TUA.
AYAH PETER - FISIK NUKLIR
995VERZILOV PETER DALAM MUDA HIDUP DI JEPANG BERSAMA DENGAN ORANG TUA.
AYAH PETER - FISIK NUKLIR
127011 SEPTEMBER 2018 PETER vrzipov dirawat di rumah sakit
Departemen Beracun
Rumah Sakit Klinik Kota
127515 SEPTEMBER DISAMPAIKAN OLEH PESAWAT UDARA SWASTA
KE SASTE KLINIK BERLIN
128018 SEPTEMBER 2018 DOKTER BERLIN
Alih-alih, VERZILOV RACUN DENGAN SCOPOLAMIN.
26 SEPTEMBER DIKOSONGKAN DARI KLINIK BERLIN
128518 SEPTEMBER 2018 DOKTER BERLIN DITERBITKAN
Alih-alih, VERZILOV RACUN DENGAN SCOPOLAMIN.
26 SEPTEMBER DIKOSONGKAN DARI KLINIK BERLIN
1395"MEDIAZONE" - intravrnvt-eddniv tentang pengadilan,
ARREST DAN RUSIA. Sebagian besar di St. 2014 di tahun ini
HARAPAN tol_okonnikovoy dan MARIEI Alekhinoi
1590“Jika sesuatu adalah daftar harga yang MENAKUTKAN? Nonsendchit, '
Anda HARUS dari DIRI
1760yoko ono - GAMBAR PUBLIK, WIDOW OF JOE "...
PE
VICE, ARTIST,
2040"JIKA BEBERAPA ORANG TUA ADALAH ORANG TUA GILA,
INI, Sebaliknya, ALASAN UNTUK MENGHORMATI! - "
2330"IBU INTERNAL"
2425CITY OF KITEGE - KOTA SUNFRONT, _ TELAH TERJADI ‚menurut legenda,
DI BAGIAN LUAR NEGERI NOVGOROD DAERAH,
DI PANTAI SVETLOYAR DANAU
2515“KAMI MENUNJUKKAN LOBSER dan membantu
zdvlichiny dan PENULIS »
2550SEKARANG- DALAM PELUANG RUSIA › ''
HIDUP DAN KARYA DI AS
2745TOLOKONNIKOVA LULUS DI PENJARA 661 HARI.
. DARI 3 MARET 2012 KE 23 DESEMBER 2013
Di md.
2985VPTSN - KETENTUAN MENGENAI SLENG
LAKI-LAKI-LAKI-LAKI-LAKI SEORANG KOMUNITAS LGBT ‚
00 SWITCHES “UNDER MALYO____A”
2990VTsTSN - KETENTUAN MENGENAI SLENG _
GADIS SEPERTI MANUSIA LGBT
DENGAN RAMBUT "DI BAWAH THE BOY"
3280"WAKTU RUSIA SEPERTI" BAIK
; B?
3290SHIZO - INSULATOR HUKUM. DEPARTEMEN LEMBAGA KOREKTIF,
DI MANA KAMERAS TERLETAK UNTUK ISI MODE TERUS.
MAN YANG DITEMPATKAN DI DALAM INSULATOR HUKUM,
HAK TERBATAS YANG SIGNIFIKAN
‚›, - "
3315"MAN, yang duduk untuk waktu yang lama," E;
RENEWS hidupnya lagi ”; 3
3510SETELAH PROMOSI DALAM CANDI KRISTUS - '‚PEMBAYARAN DITETAPKAN DAN
TIGA PESERTA RPZZU KUT DITERIMA
HARAPAN TOLOKONNIKOVA, MARIA ALEKHIN DAN YEKATERINA SAMUTSEVICH
3540SAMUT EKATERINA
DAPATKAN DUA TAHUN SECARA KONDISI
3660“YOUTH sangat trauma. __
bahwa PPN tidak memiliki cerukan EKSKLUSIF ”; ''
3740HARAPAN TOLOKONIKOVA DUA YANG DIUMUMKAN HUNTING LAPISAN
DI MORDOVY COLONY N ° 14 TENTANG PERSYARATAN TRANSLASI
DI TEMPAT LAIN DARI HUKUMAN
4275PIDATO TENTANG RZZU RUT BERBAGI MEDISINALIS MASUK GAME »_
DALAM FINAL KEJUARAAN DUNIA 2018 DI MOSKOW
4495
''
“KOMBINASI PERMAINAN DAN POSISI”
4735"JIKA AKU AKAN MEMILIKI BADAN DAN BAIK,"
SAYA AKAN MEMILIH BURUK
4755"SEJARAH Kebun Binatang"
4800BERNIE SANDERS - CALON UNTUK NAME_PRESIDENT KAMI
DALAM PEMILIHAN 2016_ODA. PRIMERISASI KEHILANGAN
HIPPARI CLINTON DEMO
-
4820. SALAH DENGAN IN
KENYATAAN
_umvdiv berbicara dan RAznBіkh linguistik
4865"Zdorny jogging"
5055»" "
"REP adalah pemahaman realitas"


Script jelas memiliki beberapa masalah dengan mengenali font WOOD "spesifik". Saya melihat solusi untuk masalah ini dalam menyelesaikan file kamus untuk OCR dan dalam teks pasca-pemrosesan melalui PyEnchant.

Dengan sedikit perbaikan, skrip ini dapat digunakan untuk mencari subtitle yang disematkan, mengenalinya dan secara otomatis menerjemahkan ke bahasa lain.

Jika Anda dapat mendorong Yuri untuk belajar tentang eksperimen ini, silakan lakukan tanpa penundaan. #habr #vdudictionary VK , FB .

Terima kasih atas perhatian anda! Script dan posting muncul sebagai hasil dari penerbangan fantasi sambil mempelajari OpenCV untuk proyek robot pemetik bola golf saya.

Source: https://habr.com/ru/post/id428147/


All Articles