Suatu ketika, ketika duduk di YouTube, mencari melodi pendidikan yang menarik, saya menemukan video dengan Synthesia, beberapa di antaranya sangat saya sukai, saya memutuskan untuk mengunduh dan belajar ... =) Tapi sayangnya, ternyata ada video, tetapi tidak ada yang mau mengunggah file midi = (
Pergi untuk Google memutuskan untuk mencari mungkin ada solusi siap pakai yang cocok untuk saya, tetapi sayangnya, dari kenyataan bahwa saya menemukan hanya ada konverter audio di midi, yang sedikit membuat saya sedih ... Tanpa berpikir dua kali, saya memutuskan bahwa itu akan cukup untuk mengembalikan frame rate MIDI dalam klip video ..., dan saya memutuskan untuk mencoba menerapkan bisnis ini ....
Saya tidak ingin menulis semuanya dari awal, karena saya memutuskan apa yang akan saya lakukan pada komponen yang sudah jadi yang disediakan oleh Debian GNU / Linux, dari mana python paling cocok.
Pada awal implementasi, saya memutuskan untuk menggunakan gambar yang sudah jadi (ditarik dari klip video), tetapi setelah unggahan pertama saya menyadari bahwa itu tidak masuk akal ... Ternyata sangat lambat dan juga menghabiskan banyak sumber daya pada sekrup ... Kemudian saya memutuskan untuk mencoba hal baru untuk diri saya sendiri sebagai OpenCV (Saya ingin merasakannya untuk waktu yang lama), ternyata OpenCV bekerja sangat baik dengan aliran video, menyediakan semua fungsi yang saya butuhkan (menghitung piksel, bingkai tampilan, dan teks).
Misalnya, membuka file video dan menerima satu bingkai dapat dijelaskan dalam dua baris:
vidcap = cv2.VideoCapture('test.mp4') success,image = vidcap.read()
Dan jika Anda mau, Anda dapat langsung membuang frame ke sekrup:
cv2.imwrite("/tmp/frame%d.jpg" % frame, image)
Setelah beberapa waktu, saya menulis fungsi untuk menghasilkan posisi tombol keyboard virtual, dan menampilkannya (dalam bentuk persegi panjang) di atas gambar streaming dan mengunggah gambar, yang berikut ini ternyata:

Jadi setelah memutuskan bahwa bingkai demi bingkai, ketika membaca gambar dari aliran video, saya akan membaca catatan aktif dari posisi tombol virtual (hanya catatan yang pikselnya bertepatan dengan warna referensi atau tidak jauh dari itu) dianggap aktif dan mengirimkannya ke midi. Saya tidak bisa begitu saja mendaftarkan catatan, karena jika situasinya pada papan ketik midi biasa, itu hanya sedikit lebih mudah ... Saya memeriksa di video, saya melihat berapa banyak catatan yang saya dapatkan (dan ada banyak dari mereka) Saya pikir tidak buruk, yang harus saya lakukan hanyalah mencari cara untuk menulis catatan ke sebuah file, mencari sedikit , menemukan paket python python-midiutil yang bagus. Setelah beberapa waktu saya dapat merekam catatan di midi. Ternyata, python-midiutil adalah sachet yang sangat sederhana dan sangat user-friendly. Misalnya, membuat file dan menambahkan catatan dilakukan dalam beberapa baris:
mf.addTrackName(track, time, "Sample Track") mf.addTempo(track, time, 60 ) mf.addNote(track, channel, pitch, keytime, duration, volume) with open(outputmid, 'wb') as outf: mf.writeFile(outf)
Mengunduh midi yang dihasilkan di LMMS ternyata cukup berhasil. Pertama-tama, saya mengembalikan beberapa lagu favorit saya. Kemudian menjadi jelas bahwa fungsi untuk menghasilkan posisi kunci tidak terlalu nyaman dari roller ke roller, lokasi mereka berubah, saya memutuskan bahwa saya akan melakukan GUI, saya melakukan yang sederhana, tetapi dengan fungsi penempatan kunci

Saya pikir program ini dapat bermanfaat bagi banyak orang, karena saya memposting semuanya di github