Rumah  >  Artikel  >  Peranti teknologi  >  Bagaimana untuk mencipta aplikasi penglihatan komputer yang lengkap dalam beberapa minit dengan hanya dua fungsi Python

Bagaimana untuk mencipta aplikasi penglihatan komputer yang lengkap dalam beberapa minit dengan hanya dua fungsi Python

WBOY
WBOYke hadapan
2024-03-12 17:07:24392semak imbas

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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam