


Bagaimana untuk mencipta aplikasi penglihatan komputer yang lengkap dalam beberapa minit dengan hanya dua fungsi Python
Penterjemah | Li Rui
Penilai |. Kemudian, Pipeless, rangka kerja sumber terbuka, diperkenalkan secara terperinci, yang menyediakan pengalaman pembangunan tanpa pelayan untuk penglihatan komputer terbenam. Akhir sekali, panduan langkah demi langkah terperinci disediakan yang menunjukkan cara mencipta dan menjalankan aplikasi pengesanan objek mudah menggunakan beberapa fungsi dan model Python.
Cipta Aplikasi Penglihatan Komputer
Satu cara untuk menerangkan "penglihatan komputer" adalah dengan mentakrifkannya sebagai "bidang pengecaman dan pemprosesan imej yang menggunakan kamera dan teknik algoritma." Walau bagaimanapun, definisi mudah ini mungkin tidak memenuhi sepenuhnya pemahaman orang ramai tentang konsep tersebut. Oleh itu, untuk mendapatkan pemahaman yang lebih mendalam tentang proses membina aplikasi penglihatan komputer, kita perlu mempertimbangkan kefungsian yang perlu dilaksanakan oleh setiap subsistem. Proses membina aplikasi penglihatan komputer melibatkan beberapa langkah utama, termasuk pemerolehan imej, pemprosesan imej, pengekstrakan ciri, pengecaman objek, dan membuat keputusan. Pertama, data imej diperoleh melalui kamera atau peranti pemerolehan imej lain. Imej kemudiannya diproses menggunakan algoritma, termasuk operasi seperti denoising, peningkatan dan segmentasi untuk analisis selanjutnya. Semasa peringkat pengekstrakan ciri, sistem mengenal pasti ciri utama dalam imej, seperti
Untuk memproses strim video 60 fps dalam masa nyata, setiap bingkai perlu diproses dalam masa 16 milisaat. Ini biasanya dicapai melalui multi-threading dan multi-processing. Kadang-kadang perlu untuk memulakan pemprosesan bingkai seterusnya sebelum yang sebelumnya selesai untuk memastikan pemprosesan bingkai benar-benar pantas.
Untuk model kecerdasan buatan, syukurlah terdapat banyak model sumber terbuka yang sangat baik tersedia sekarang, jadi dalam kebanyakan kes, tidak perlu membangunkan model anda sendiri dari awal, hanya memperhalusi parameter untuk memenuhi kes penggunaan tertentu. Model ini menjalankan inferens pada setiap bingkai, melaksanakan tugas seperti pengesanan objek, pembahagian, anggaran pose dan banyak lagi.
• Masa jalan inferens: Masa jalan inferens bertanggungjawab untuk memuatkan model dan menjalankannya dengan cekap pada peranti tersedia yang berbeza (GPU atau CPU).
Untuk memastikan model boleh berjalan dengan cepat semasa proses inferens, penggunaan GPU adalah penting. GPU boleh mengendalikan susunan magnitud operasi yang lebih selari daripada CPU, terutamanya apabila memproses sejumlah besar operasi matematik. Semasa memproses bingkai, anda perlu mempertimbangkan lokasi memori di mana bingkai terletak Anda boleh memilih untuk menyimpannya dalam memori GPU atau memori CPU (RAM). Walau bagaimanapun, menyalin bingkai antara dua kenangan berbeza ini boleh mengakibatkan operasi yang lebih perlahan, terutamanya apabila saiz bingkai adalah besar. Ini juga bermakna bahawa pilihan memori dan overhed pemindahan data perlu ditimbang untuk mencapai proses inferens model yang lebih cekap.
Saluran paip multimedia ialah satu set komponen yang mengambil aliran video daripada sumber data, membahagikannya kepada bingkai, dan kemudian menggunakannya sebagai input kepada model. Kadangkala, komponen ini juga boleh mengubah suai dan membina semula strim video untuk pemajuan. Komponen ini memainkan peranan penting dalam memproses data video, memastikan aliran video boleh dihantar dan diproses dengan cekap.
• Pengurusan Strim Video: Pembangun mungkin mahu aplikasi dapat menahan gangguan strim video, penyambungan semula, menambah dan mengalih keluar strim video secara dinamik, mengendalikan berbilang strim video secara serentak dan banyak lagi.
Semua sistem ini perlu dicipta atau digabungkan ke dalam projek, dan oleh itu, kod perlu dikekalkan. Walau bagaimanapun, masalahnya ialah anda akhirnya mengekalkan sejumlah besar kod yang bukan khusus aplikasi, sebaliknya subsistem yang mengelilingi kod khusus kes sebenar.
Rangka Kerja Tanpa Paip
Untuk mengelakkan membina semua perkara di atas dari awal, anda boleh menggunakan rangka kerja Tanpa Paip. Ini ialah rangka kerja sumber terbuka untuk penglihatan komputer yang membenarkan beberapa fungsi khusus kes dan mampu mengendalikan perkara lain.
Rangka kerja tanpa paip membahagikan logik aplikasi kepada "peringkat", salah satunya adalah seperti aplikasi mikro bagi satu model. Satu peringkat boleh termasuk prapemprosesan, menjalankan inferens menggunakan input praproses dan pasca pemprosesan output model untuk tindakan. Anda kemudiannya boleh merangkai seberapa banyak peringkat yang anda suka untuk membuat aplikasi yang lengkap, walaupun menggunakan berbilang model.
Untuk menyediakan logik bagi setiap peringkat, cuma tambahkan fungsi kod khusus aplikasi dan Pipeless menguruskan panggilannya apabila diperlukan. Inilah sebabnya Pipeless boleh dianggap sebagai rangka kerja yang menyediakan pengalaman pembangunan seperti pelayan untuk penglihatan komputer terbenam dan menyediakan beberapa fungsi tanpa perlu risau tentang keperluan untuk subsistem tambahan.
Satu lagi ciri hebat Pipeless ialah keupayaan untuk mengautomasikan pemprosesan strim video dengan menambah, memadam dan mengemas kini strim video secara dinamik melalui CLI atau REST API. Anda juga boleh menentukan dasar mulakan semula, menunjukkan masa pemprosesan strim video harus dimulakan semula, sama ada ia perlu dimulakan semula selepas ralat, dan sebagainya.
Akhir sekali, untuk menggunakan rangka kerja Pipeless, cuma pasangkannya pada mana-mana peranti dan jalankannya dengan fungsi kod anda, sama ada dalam mesin maya pengkomputeran awan atau mod kontena, atau terus dalam peranti tepi seperti Nvidia Jetson, Raspberry, dsb.
Membuat Aplikasi Pengesanan Objek
Berikut ialah pandangan mendalam tentang cara mencipta aplikasi pengesanan objek mudah menggunakan rangka kerja Tanpa Paip.
Langkah pertama ialah pemasangan. Skrip pemasangan menjadikannya sangat mudah untuk dipasang:
Curl https://raw.githubusercontent.com/pipeless-ai/pipeless/main/install.sh | bash
Kini, projek mesti dibuat. Projek tanpa paip ialah direktori yang mengandungi peringkat. Setiap peringkat berada dalam subdirektori, dan dalam setiap subdirektori, fail yang mengandungi cangkuk (fungsi kod khusus) dicipta. Nama yang diberikan untuk setiap folder peringkat ialah nama pentas yang mesti ditunjukkan pada kotak Tanpa Paip kemudian apabila anda mahu menjalankan peringkat itu untuk strim video.
pipeless init my-project --template emptycd my-project
Di sini, templat kosong memberitahu CLI untuk mencipta direktori sahaja, jika tiada templat disediakan, CLI akan menggesa beberapa soalan untuk mencipta pentas secara interaktif.
Seperti yang dinyatakan di atas, kini perlu menambah pentas kepada projek. Muat turun contoh peringkat daripada GitHub menggunakan arahan berikut:
wget -O - https://github.com/pipeless-ai/pipeless/archive/main.tar.gz | tar -xz --strip=2 "pipeless-main/examples/onnx-yolo"
Ini akan mencipta direktori peringkat onnx-yolo yang mengandungi fungsi aplikasi.
Kemudian, semak kandungan setiap fail peringkat, iaitu cangkuk aplikasi.
Berikut ialah fail pra-proses.py yang mentakrifkan fungsi (cangkuk) yang menerima bingkai dan pemandangan. Fungsi ini menjalankan beberapa operasi untuk menyediakan data input yang menerima bingkai RGB supaya ia sepadan dengan format yang diharapkan oleh model. Data ini ditambahkan pada frame_data['interence_input'], iaitu data yang Pipeless akan dihantar kepada model.
def hook(frame_data, context):frame = frame_data["original"].view()yolo_input_shape = (640, 640, 3) # h,w,cframe = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)frame = resize_rgb_frame(frame, yolo_input_shape)frame = cv2.normalize(frame, None, 0.0, 1.0, cv2.NORM_MINMAX)frame = np.transpose(frame, axes=(2,0,1)) # Convert to c,h,winference_inputs = frame.astype("float32")frame_data['inference_input'] = inference_inputs... (some other auxiliar functions that we call from the hook function)
Terdapat juga fail process.json yang menunjukkan masa jalan inferens tanpa paip untuk digunakan (masa jalan ONNX dalam kes ini), tempat untuk mencari model yang sepatutnya dimuatkan, dan beberapa parameter Pilihannya, seperti sebagai execution_provider yang akan digunakan, iaitu CPU, CUDA, TensorRT, dsb.
{ "runtime": "onnx","model_uri": "https://pipeless-public.s3.eu-west-3.amazonaws.com/yolov8n.onnx","inference_params": { "execution_provider": "tensorrt" }}
Akhir sekali, fail post-process.py mentakrifkan fungsi yang serupa dengan fungsi dalam pre-process.py. Kali ini, ia menerima output inferens yang disimpan Pipeless dalam frame_data["inference_output"] dan melaksanakan operasi menghuraikan output tersebut ke dalam kotak sempadan. Kemudian, ia melukis kotak sempadan pada bingkai dan akhirnya memberikan bingkai yang diubah suai kepada frame_data['diubah suai']. Dengan cara ini, Pipeless akan memajukan strim video yang disediakan, tetapi dengan bingkai yang diubah suai, termasuk kotak sempadan.
def hook(frame_data, _):frame = frame_data['original']model_output = frame_data['inference_output']yolo_input_shape = (640, 640, 3) # h,w,cboxes, scores, class_ids = parse_yolo_output(model_output, frame.shape, yolo_input_shape)class_labels = [yolo_classes[id] for id in class_ids]for i in range(len(boxes)):draw_bbox(frame, boxes[i], class_labels[i], scores[i])frame_data['modified'] = frame... (some other auxiliar functions that we call from the hook function)
Langkah terakhir ialah memulakan Pipeless dan menyediakan strim video. Untuk memulakan Pipeless, cuma jalankan arahan berikut dalam direktori my-project:
pipeless start --stages-dir .
Setelah dijalankan, strim video dari webcam (v4l2) akan disediakan dan output akan dipaparkan terus pada skrin. Perlu diingatkan bahawa senarai peringkat yang strim video laksanakan mengikut turutan mesti disediakan. Dalam kes ini, ia hanya peringkat onnx-yolo:
pipeless add stream --input-uri "v4l2" --output-uri "screen" --frame-path "onnx-yolo"
Kesimpulan
Membuat aplikasi visi komputer adalah tugas yang kompleks kerana terdapat banyak faktor dan subsistem yang mesti dilaksanakan di sekelilingnya. Dengan rangka kerja seperti Pipeless, bangun dan berjalan hanya mengambil masa beberapa minit, membolehkan anda menumpukan pada menulis kod untuk kes penggunaan tertentu. Di samping itu, "peringkat" tanpa paip sangat boleh digunakan semula dan mudah diselenggara, jadi penyelenggaraan akan menjadi mudah dan ia boleh diulang dengan cepat.
Jika anda ingin mengambil bahagian dalam pembangunan Pipeless, anda boleh berbuat demikian melalui repositori GitHubnya.
Tajuk asal: Cipta Apl Penglihatan Komputer Lengkap dalam Beberapa Minit Dengan Hanya Dua Fungsi Python, pengarang: Miguel Angel Cabrera
Pautan: https://www.php.cn/link/e284dea
Atas ialah kandungan terperinci Bagaimana untuk mencipta aplikasi penglihatan komputer yang lengkap dalam beberapa minit dengan hanya dua fungsi Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Tiada fungsi jumlah terbina dalam dalam bahasa C, jadi ia perlu ditulis sendiri. Jumlah boleh dicapai dengan melintasi unsur -unsur array dan terkumpul: Versi gelung: SUM dikira menggunakan panjang gelung dan panjang. Versi Pointer: Gunakan petunjuk untuk menunjuk kepada unsur-unsur array, dan penjumlahan yang cekap dicapai melalui penunjuk diri sendiri. Secara dinamik memperuntukkan versi Array: Perlawanan secara dinamik dan uruskan memori sendiri, memastikan memori yang diperuntukkan dibebaskan untuk mengelakkan kebocoran ingatan.

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Halaman H5 perlu dikekalkan secara berterusan, kerana faktor -faktor seperti kelemahan kod, keserasian pelayar, pengoptimuman prestasi, kemas kini keselamatan dan peningkatan pengalaman pengguna. Kaedah penyelenggaraan yang berkesan termasuk mewujudkan sistem ujian lengkap, menggunakan alat kawalan versi, kerap memantau prestasi halaman, mengumpul maklum balas pengguna dan merumuskan pelan penyelenggaraan.

Walaupun berbeza dan berbeza berkaitan dengan perbezaan, ia digunakan secara berbeza: berbeza (kata sifat) menggambarkan keunikan perkara itu sendiri dan digunakan untuk menekankan perbezaan antara perkara; Berbeza (kata kerja) mewakili tingkah laku atau keupayaan perbezaan, dan digunakan untuk menggambarkan proses diskriminasi. Dalam pengaturcaraan, berbeza sering digunakan untuk mewakili keunikan unsur -unsur dalam koleksi, seperti operasi deduplikasi; Berbeza dicerminkan dalam reka bentuk algoritma atau fungsi, seperti membezakan ganjil dan bahkan nombor. Apabila mengoptimumkan, operasi yang berbeza harus memilih algoritma dan struktur data yang sesuai, sementara operasi yang berbeza harus mengoptimumkan perbezaan antara kecekapan logik dan memberi perhatian untuk menulis kod yang jelas dan mudah dibaca.

! X Memahami! X adalah bukan operator logik dalam bahasa C. Ia booleans nilai x, iaitu, perubahan benar kepada perubahan palsu, palsu kepada benar. Tetapi sedar bahawa kebenaran dan kepalsuan dalam C diwakili oleh nilai berangka dan bukannya jenis Boolean, bukan sifar dianggap sebagai benar, dan hanya 0 dianggap sebagai palsu. Oleh itu ,! X memperkatakan nombor negatif sama seperti nombor positif dan dianggap benar.

Tiada fungsi jumlah terbina dalam dalam C untuk jumlah, tetapi ia boleh dilaksanakan dengan: menggunakan gelung untuk mengumpul unsur-unsur satu demi satu; menggunakan penunjuk untuk mengakses dan mengumpul unsur -unsur satu demi satu; Untuk jumlah data yang besar, pertimbangkan pengiraan selari.

Bagaimana untuk mendapatkan data dinamik 58.com halaman kerja semasa merangkak? Semasa merangkak halaman kerja 58.com menggunakan alat crawler, anda mungkin menghadapi ...

PS "Memuatkan" Masalah disebabkan oleh akses sumber atau masalah pemprosesan: Kelajuan bacaan cakera keras adalah perlahan atau buruk: Gunakan CrystaldiskInfo untuk memeriksa kesihatan cakera keras dan menggantikan cakera keras yang bermasalah. Memori yang tidak mencukupi: Meningkatkan memori untuk memenuhi keperluan PS untuk imej resolusi tinggi dan pemprosesan lapisan kompleks. Pemandu kad grafik sudah lapuk atau rosak: Kemas kini pemandu untuk mengoptimumkan komunikasi antara PS dan kad grafik. Laluan fail terlalu panjang atau nama fail mempunyai aksara khas: Gunakan laluan pendek dan elakkan aksara khas. Masalah PS sendiri: Pasang semula atau membaiki pemasang PS.
