Pernahkah Anda bertanya-tanya bagaimana komputer menemukan objek yang diperlukan untuk diproses dari aliran video? Sekilas, ini terlihat seperti tugas pemrograman "tinggi" yang menggunakan sejumlah besar rumus dari analisis matematika, matematika diskrit, dll., Membutuhkan banyak pengetahuan untuk menulis setidaknya program kecil seperti "Halo, dunia" di dunia pengenalan gambar di video. Dan jika Anda diberi tahu bahwa sebenarnya sekarang jauh lebih mudah untuk memasuki dunia computer vision, dan setelah membaca artikel ini Anda dapat menulis program Anda sendiri yang akan mengajarkan komputer Anda untuk melihat dan mendeteksi wajah? Juga di akhir artikel Anda akan menemukan bonus yang dapat meningkatkan keamanan PC Anda menggunakan computer vision.
Agar komputer Anda mulai memahami bahwa Anda sedang menampilkan sesuatu yang terlihat seperti wajah, kami memerlukan:
- Komputer;
- Kamera web;
- Python 3;
- Editor kode favorit Anda (PyCharm, Jupyter, dll.).
Jadi, setelah Anda mengumpulkan semua yang Anda butuhkan dari daftar di atas, kami dapat melanjutkan ke penulisan langsung program kami untuk pengenalan wajah.
Pertama, unduh pustaka Python yang diperlukan menggunakan perintah di Command Line:
pip install opencv-python; numpy
Secara singkat tentang mengapa kita membutuhkannya:
OpenCV. Perpustakaan ini adalah tulang punggung dari hampir setiap proyek visi komputer modern. Ini menampung ratusan visi komputer dan algoritma pemrosesan gambar. Ini awalnya ditulis dalam C / C ++, tetapi kemudian ditulis ulang dengan Python juga karena permintaannya yang besar dalam bahasa ini.
Numpy. Akan membantu dengan perhitungan internal pustaka OpenCV.
Setelah menyelesaikan instalasi perpustakaan yang kita butuhkan, buka editor kode favorit kita dan mulai menulis program kita:
Lampirkan perpustakaan visi komputer OpenCV
import cv2 as cv
2. Kami merekam aliran video dari kamera web menggunakan metode VideoCapture (indeks), di mana indeks adalah nomor seri kamera web kami di sistem. Jika hanya ada satu kamera, parameternya akan sama dengan 0.
capture = cv.VideoCapture(0)
3. Untuk mendapatkan video, kita akan menggunakan metode read (), yang mengembalikan kita bendera rtrn - menunjukkan keberhasilan menangkap bingkai dari aliran video dan gambar - bingkai aliran video kita (numpy array). Kami akan membaca data dari aliran video terus menerus sampai tombol Escape ditekan.
while True:
rtrn, image = capture.read()
cv.imshow("Capture from Web-camera", image) #
if cv.waitKey(1) == 27: # Esc
break
capture.release()
cv.destroyAllWindows()
Kami menyimpan file kami, jalankan dari baris perintah menggunakan python our_file_name.py. Sekarang program kami dapat menerima aliran video dari kamera web! Ini berarti kita sudah setengah jalan pada fakta bahwa komputer dapat mengenali wajah.
4. Mari kita buat agar komputer kita juga dapat menulis video ke file:
Tentukan codec untuk menyimpan video, tentukan nama untuk file yang disimpan, fps dan ukuran. Untuk tugas kami, kami mengambil codec XVID.
import cv2 as cv
capture = cv.VideoCapture(0)
codec = cv.VideoWriter_fourcc(*'XVID')
5. Kami secara berurutan mengeluarkan bingkai ke jendela video, dan kemudian menyimpan hasilnya ke variabel keluaran. Kemudian data dari output, setelah akhir aliran video, akan ditransfer ke file "save_from_camera.avi":
output = cv.VideoWriter('saved_from_camera.avi ', codec, 25.0, (640, 480))
while capture.isOpened():
rtrn, image = capture.read()
if cv.waitKey(1) == 27 or rtrn == False:
break
cv.imshow('video for save', image)
output.write(image)
output.release()
capture.release()
cv.destroyAllWindows()
Setelah kita mempelajari cara mengambil video dari kamera Web dan menyimpannya ke file, kita dapat melanjutkan ke hal yang paling menarik - pengenalan wajah dalam aliran video. Untuk menemukan wajah dalam bingkai, kami akan menggunakan yang disebut Fitur Haar. Esensinya adalah jika kita mengambil area persegi panjang pada gambar, maka dengan perbedaan intensitas antara piksel persegi panjang yang berdekatan, kita dapat membedakan fitur yang melekat pada wajah.
Misalnya, pada gambar dengan wajah, area di sekitar mata lebih gelap daripada di sekitar pipi. Oleh karena itu, salah satu Tanda Haar untuk wajah dapat disebut 2 persegi panjang yang berdekatan di pipi dan mata.
Ada banyak metode lain yang lebih cepat dan lebih akurat untuk mendeteksi objek dalam gambar, tetapi untuk memahami prinsip umum, kita hanya perlu mengetahui Tanda Haar untuk saat ini.
Pengembang OpenCV telah melakukan pekerjaan untuk menentukan Haar Signs dan memberikan semua hasil untuk kemampuan pemrosesan aliran video.
Mari kita mulai menulis detektor wajah dari kamera web kita:
6. Pertama-tama, dapatkan Fitur Haar kita dan tentukan parameter untuk menangkap aliran video. File Ciri-ciri terletak di jalur tempat pustaka Python dipasang. Secara default, mereka berada di folder
C:/Python3X/Lib/sitepackages/cv2/data/haarcascade_frontalface_default.xml
di mana X adalah subversi Python 3 Anda.
import cv2 as cv
cascade_of_face = cv.CascadeClassifier('C:/Python3.X/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml ')
capture = cv.VideoCapture(0)
capture.set(cv.CAP_PROP_FPS, 25) # 25
7. Selanjutnya, dalam perulangan, kami akan bergiliran membaca bingkai dari kamera web dan mengirimkannya ke detektor wajah kami:
while True:
rtrn, image = capture.read()
gr = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
faces_detect = cascade_of_face.detectMultiScale(
image=gr,
minSize=(15, 15),
minNeighbors=10,
scaleFactor=1.2
)
for (x_face, y_face, w_face, h_face) in faces_detect:
cv.rectangle(image, (x_face, y_face), (x_face + w_face, y_face + h_face), (0, 0, 255), 2)
cv.imshow("Image", image)
if cv.waitKey(1) == 27: # Esc key
break
capture.release()
cv.destroyAllWindows()
8. Sekarang mari kita gabungkan semuanya menjadi satu kesatuan dan dapatkan program yang menangkap video dari kamera web, mengenali wajah di atasnya dan menyimpan hasilnya ke file:
import cv2 as cv
faceCascade = cv.CascadeClassifier('C:/Users/Zet/Desktop/Python/test_opencv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
capture = cv.VideoCapture(0)
capture.set(cv.CAP_PROP_FPS, 25)
codec = cv.VideoWriter_fourcc(*'XVID')
output = cv.VideoWriter('saved_from_camera.avi', codec, 25.0, (640, 480))
while True:
rtrn, image = capture.read()
gr = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
faces_detect = faceCascade.detectMultiScale(
image=gr,
minSize=(15, 15),
minNeighbors=10,
scaleFactor=1.2
)
for (x_face, y_face, w_face, h_face) in faces_detect:
cv.rectangle(image, (x_face, y_face), (x_face + w_face, y_face + h_face), (255, 0, 0), 2)
cv.imshow("Image", image)
output.write(image)
if cv.waitKey(1) == 27: # Esc key
break
output.release()
capture.release()
cv.destroyAllWindows()
Semua! Anda telah menulis program yang merupakan langkah pertama untuk memahami bagaimana komputer melihat. Lebih lanjut, Anda dapat meningkatkan pengenalan wajah, misalnya, sehingga komputer mengenali orang-orang tertentu di video dengan melatih jaringan saraf. Anda juga dapat menulis pendeteksi yang dikonfigurasi untuk mengenali objek yang lebih kompleks (misalnya, melacak lalu lintas) dengan kemampuan untuk menganalisisnya. Dan juga untuk menyelesaikan tugas lain yang tidak kalah menarik dari computer vision.
BONUS
Mari menerapkan program dalam praktek - kami akan melacak login di bawah akun.
- Mari kita pergi ke Penjadwal Tugas (dapat ditemukan melalui Pencarian Windows standar);
- Mari buat Tugas Sederhana, beri judul dan deskripsi singkat;
3. Klik Next dan pergi ke item Trigger. Di sini kami memilih acara di mana peluncuran tugas kami akan terjadi. Kami memilih "Saat memasuki Windows";
4. Selanjutnya, dalam tindakan, kami menunjukkan "Jalankan program";
5. Dalam Tindakan, tentukan jalur ke python.exe, dan di Parameter - jalur ke program kami:
Selesai! Akibatnya, saat masuk, orang yang masuk dengan akun tersebut akan direkam, dan video tersebut akan disimpan. Dengan demikian, Anda dapat melacak siapa yang bekerja di depan komputer saat Anda tidak ada, sambil menyimpan catatan bukti.