Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android

Mengidentifikasi orang-orang dengan Qualcomm Snapdragon SDK

by
Difficulty:AdvancedLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Sandi Muamar (you can also view the original English article)

Bukan itu lama bahwa mengambil foto adalah cukup mahal. Kamera diperlukan film dengan kapasitas terbatas dan juga melihat hasil diperlukan tambahan waktu dan lebih banyak uang. Kendala melekat memastikan bahwa kami akan selektif dengan foto-foto kami mengambil.

Fast forward ke hari ini dan kendala-kendala ini telah berkurang berkat teknologi, tapi kita sekarang dihadapkan dengan masalah baru, penyaringan, pengorganisasian, dan mengungkap penting foto dari banyak yang kita ambil.

Masalah ini baru adalah apa yang menginspirasi tutorial ini. Di dalamnya, saya akan menunjukkan bagaimana kita dapat menggunakan tool baru untuk membantu membuat hidup pengguna lebih mudah dengan memperkenalkan cara baru untuk penyaringan dan mengatur konten kami.

1. konsep

Untuk proyek ini, kita akan melihat cara yang berbeda untuk fo;ter melalui koleksi foto Anda. Sepanjang jalan, Anda akan belajar bagaimana untuk mengintegrasikan dan menggunakan Qualcomm Snapdragon SDK untuk facial processing dan recognition.

Kami akan memungkinkan pengguna untuk fo;ter koleksi foto dengan identitas identitas. Koleksi akan disaring oleh identitas dari foto pengguna, seperti yang ditunjukkan di bawah ini.

Wireframes of the application showing a master detail pattern

2. Ikhtisar

Fokus utama dari posting ini adalah pengenalan facial processing dan recognition menggunakan Qualcomm Snapdragon SDK sementara-mudah-mudahan — tidak langsung mendorong cara-cara baru berpikir dan menggunakan berasal metadata dari konten.

Untuk menghindari semakin terpaku dalam pipa, saya telah membuat template menyediakan layanan dasar untuk pemindaian melalui pengguna koleksi foto dan grid untuk menampilkan foto. Tujuan kami adalah untuk meningkatkan ini dengan konsep yang diusulkan di atas.

Pada bagian berikut, kita akan meneliti komponen ini sebelum pindah ke memperkenalkan Qualcomm Snapdragon SDK.

3. kerangka

Seperti disebutkan di atas, tujuan kami adalah untuk fokus pada Snapdragon SDK jadi saya telah menciptakan sebuah kerangka yang memiliki semua yang sudah dilaksanakan. Di bawah ini adalah diagram dan deskripsi proyek, yang tersedia untuk di-download dari GitHub.

Component model for the application broken down into Presentation Service and Data layers

Paket data kami mengandung sebuah implementasi SQLiteOpenHelper (IdentityGalleryDatabase) bertanggung jawab untuk menciptakan dan mengelola database kami. Database akan terdiri dari tiga tabel, satu untuk bertindak sebagai pointer ke media record (photo), satu lagi untuk terdeteksi identitas (identity) dan akhirnya tabel hubungan yang menghubungkan identitas dengan foto mereka (identity_photo).

Highlevel database schema - 3 tables of photo identity and a relationship table identity_photo

Kami akan menggunakan tabel identity untuk menyimpan atribut yang disediakan oleh SDK Snapdragon, rinci dalam bagian selanjutnya dari tutorial ini.

Juga termasuk dalam paket data adalah Provider (IdentityGalleryProvider) dan Contract (IdentityGalleryContract) kelas, yang tidak lebih dari Provider standar yang bertindak sebagai pembungkus kelas SQLiteOpenHelper.

Untuk memberikan rasa bagaimana berinteraksi dengan Provider kelas, kode berikut diambil dari kelas TestProvider. Seperti namanya, hal ini digunakan untuk menguji kelas Provider.

Paket service bertanggung jawab untuk iterasi melalui, Katalog, dan akhirnya pengolahan gambar yang tersedia melalui MediaStore. service itu sendiri extend IntentService sebagai cara mudah melakukan pengolahan di thread sendiri. Pekerjaan yang sebenarnya yang didelegasikan kepada GalleryScanner, yang merupakan kelas kami akan memperluas untuk facial process dan recognition.

GalleryScannerIntentService ini dibuat setiap kali MainActivity dibuat dengan panggilan berikut:

Ketika mulai, GalleryScannerIntentService mengambil scan terakhir tanggal dan melewati ini ke konstruktor GalleryScanner. Itu kemudian memanggil metode scan untuk mulai iterasi melalui isi dari penyedia konten MediaItem — untuk item setelah scan terakhir tanggal.

Jika Anda memeriksa scan metode GalleryScanner kelas, Anda akan melihat bahwa itu cukup verbose — tidak ada yang rumit yang terjadi di sini. Metode harus query untuk file media yang tersimpan secara internal (MediaStore.Images.Media.INTERNAL_CONTENT_URI) dan eksternal (MediaStore.Images.Media.EXTERNAL_CONTENT_URI). Setiap item kemudian dilewatkan ke metode hook, yang mana kami akan menempatkan kode kami untuk facial process dan recognition.

Lain hook dua metode dalam kelas GalleryScanner tersedia untuk kita (seperti menyarankan nama metode) untuk menginisialisasi dan de menginisialisasi FacialProcessing instance.

Paket akhir adalah paket presentation. Seperti namanya, itu host Activity kelas bertanggung jawab untuk render Galeri kami. Galeri adalah GridView melekat CursorAdapter. Seperti yang dijelaskan di atas, mengetuk item akan query database untuk foto yang berisi salah satu identitas foto yang dipilih. Misalnya, jika Anda menekan foto dari teman Lisa dan pacarnya Justin, permintaan akan filter semua foto yang berisi salah satu atau kedua Lisa dan Justin.

4. Qualcomm Snapdragon SDK

Untuk membantu developer membuat hardware mereka tampak hebat dan melakukannya keadilan, Qualcomm telah merilis set yang menakjubkan dari SDK, satu Snapdragon SDK. Snapdragon SDK mengekspos set fungsi untuk wajah pengolahan dioptimalkan.

SDK dibagi menjadi dua bagian, faciak processing dan face recognition. Mengingat bahwa tidak semua perangkat mendukung kedua- atau -fitur ini, yang mungkin adalah alasan untuk memiliki fitur ini dipisahkan, SDK menyediakan cara mudah untuk memeriksa yang memiliki perangkat mendukung. Kami akan mencakup hal ini secara lebih rinci nanti.

Facial processing menyediakan cara untuk mengekstrak fitur dari foto (wajah) termasuk:

  • Blink deteksi: Mengukur bagaimana membuka setiap mata adalah.
  • Tatapan pelacakan: Menilai mana subjek mencari.
  • Nilai senyum: Memperkirakan tingkat senyum.
  • Orientasi wajah: Melacak yaw, pitch, dan roll kepala.

Facial recognition, seperti namanya, menyediakan kemampuan untuk mengidentifikasi orang-orang dalam foto. Perlu dicatat bahwa semua proses dilakukan secara lokal — bukan di cloud.

Fitur ini dapat digunakan real time (kamera/video) atau offline (Galeri). Dalam latihan kami, kami akan menggunakan fitur ini secara offline, tetapi ada sedikit perbedaan antara dua pendekatan.

Konsultasikan dokumentasi online untuk perangkat yang didukung untuk mempelajari lebih lanjut tentang facial processing dan faced recognition.

5. menambahkan wajah Facial Processing dan Recognition

Pada bagian ini, kita akan mengisi mereka menghubungkan metode — dengan mengejutkan beberapa baris kode-untuk memberikan aplikasi kita kemampuan untuk ekstrak wajah properti dan mengidentifikasi orang-orang. Bekerja bersama, men-download sumber dari GitHub dan membuka proyek di Android Studio. Atau, Anda dapat men-download proyek selesai.

Langkah 1: Menginstal Snapdragon SDK

Hal pertama yang perlu kita lakukan adalah ambil SDK dari Qualcomm website. Perhatikan bahwa Anda harus mendaftar/login dan setuju dengan syarat dan ketentuan Qualcomm.

Setelah download, unarchive isi dan navigasi ke /Snapdragon_sdk_2.3.1/java/libs/libs_facial_processing/. Salin file sd-sdk-facial-processing.jar ke proyek Anda /app/libs/folder seperti ditunjukkan di bawah.

Android Studio Libs folder via the Project File panel

Setelah menyalin Snapdragon SDK, sd-sdk-facial-processing.jar klik kanan dan pilih Add as Library... dari daftar pilihan.

Android Studio File menu - Add As Library option

Ini akan menambah perpustakaan sebagai dependensi dalam file build.gradle seperti yang ditunjukkan di bawah ini.

Langkah terakhir adalah untuk menambahkan Perpustakaan native. Untuk melakukan ini, membuat sebuah folder bernama jniLibs di /app/src/main/ folder dan menyalin folder armeabi (dari SDK download) dan isinya ke dalamnya.

Android Studios Project folder view showing the structure where to put the native binaries

Sekarang kita siap untuk menerapkan logika untuk mengidentifikasi orang-orang yang menggunakan fungsi api. Kode snippets termasuk dalam kelas GalleryScanner.

Langkah 2: inisialisasi

Mari kita pertama menangani inisialisasi hook metode.

Pertama kita perlu memeriksa bahwa perangkat mendukung wajah pemrosesan dan pengenalan wajah. Jika tidak, kami melemparkan UnsupportedOperationException exception.

Setelah itu, kami menetapkan referensi kami lokal kelas FacialProcessing, mFacialProcessing, untuk sebuah instance baru yang menggunakan getInstance metode pabrik. Ini akan mengembalikan null jika instance sudah digunakan, dalam hal konsumen diperlukan untuk memanggil release referensi.

Jika kami telah berhasil memperoleh sebuah instance dari sebuah objek FacialProcessing, kami mengkonfigurasi dengan pertama menetapkan kepercayaan. Kami melakukannya dengan menggunakan variabel lokal, yang adalah 57 dalam kasus ini berkisar dari 0 hingga 100. Keyakinan adalah ambang batas ketika mencoba untuk menyelesaikan identitas. Setiap persamaan di bawah batas ini akan dianggap sebagai identitas terpisah.

Dalam hal menentukan nilai, sejauh yang saya tahu, ini adalah trial and error proses. Jelas semakin tinggi ambang batas, semakin akurat recognition, dengan trade-off untuk meningkatkan jumlah false-positive.

Kita kemudian mengatur modus FacialProcessing untuk FP_MODE_STILL. Pilihan di sini adalah FP_MODE_STILL atau FP_MODE_VIDEO. Sebagai nama menyarankan, satu dioptimalkan untuk gambar diam sementara yang lain untuk terus-menerus frame, keduanya memiliki jelas kasus penggunaan.

P_MODE_STILL, seperti yang Anda duga, memberikan hasil yang lebih akurat. Tetapi karena Anda akan lihat nanti, FP_MODE_STILL yang ditunjukkan oleh metode yang kami gunakan untuk memproses gambar sehingga baris ini dapat diabaikan. Saya hanya menambahkan untuk kelengkapan.

Kita kemudian memanggil loadAlbum (metode kelas GalleryScanner), yang adalah apa yang kita akan melihat selanjutnya.

Hanya menarik garis di sini adalah:

Metode counter adalah:

Satu contoh FacialProcessing dapat dianggap sebagai sesi. Menambahkan orang (dijelaskan di bawah ini) yang disimpan secara lokal (disebut sebagai "recognition album") dalam contoh. Untuk mengizinkan album Anda untuk bertahan selama beberapa sesi, yaitu setiap kali Anda mendapatkan sebuah instance baru, Anda perlu cara untuk bertahan dan memuat mereka.

Metode serializeRecogntionAlbum mengkonversi album ke dalam byte array dan sebaliknya deserializeRecognitionAlbum akan memuat dan mengurai album yang sebelumnya disimpan sebagai byte array.

Langkah 3: de inisialisasi

Kita sekarang tahu bagaimana untuk menginisialisasi FacialProcessing kelas untuk facial processing dan recognition. Sekarang mari kita fokus ke de inisialisasi dengan menerapkan metode deinitFacialProcessing.

Seperti disebutkan di atas, hanya ada satu contoh kelas FacialProcessing pada suatu waktu sehingga kita perlu memastikan kita melepaskan itu sebelum menyelesaikan tugas kita. Kita melakukan ini melalui metode release. Tapi pertama kita membuat recognition album bertahan sehingga kita dapat menggunakan hasil atas beberapa sesi. Dalam kasus ini, bila pengguna diperlukan atau menerima foto baru, kami ingin memastikan bahwa kita menggunakan identitas sebelumnya diakui bagi orang yang sama.

Langkah 4: Pengolahan Gambar

Kami akhirnya siap untuk menyempurnakan metode akhir hook dan menggunakan FacialProcessing kelas. Blok kode yang berikut termasuk metode processImage. Saya telah membagi mereka untuk kejelasan.

Metode membutuhkan referensi ke instance kelas ContentValues, yang memegang metadata untuk gambar ini, bersama dengan URI yang mengarah ke gambar tersebut. Kami menggunakan ini untuk memuat gambar ke dalam memori.

Kode snippet berikut akan menggantikan komentar di atas // continued below (1).

Seperti disebutkan di atas, kita pertama kali pass gambar statis ke FacialProcessing instance melalui metode setBitmap. Menggunakan metode ini secara implisit menggunakan modus FP_MODE_STILL. Metode ini mengembalikan True jika gambar berhasil diproses dan False jika gagal pengolahan.

Metode alternatif untuk pengolahan streaming gambar (biasanya untuk kamera Tinjauan frame) adalah:

Sebagian besar parameter jelas. Anda harus pass di Apakah frame adalah membalik (hal ini biasanya diperlukan untuk kamera menghadap ke depan) dan jika setiap rotasi telah diterapkan (biasanya ditetapkan melalui metode setDisplayOrientation contoh Camera).

Kami kemudian query untuk jumlah wajah terdeteksi dan hanya melanjutkan jika setidaknya satu ditemukan. Metode getFaceData kembali rincian untuk setiap wajah terdeteksi sebagai sebuah array object FaceData, dimana setiap objek FaceData merangkum wajah fitur, termasuk:

  • batas wajah (FACE_RECT)
  • wajah, mulut, dan lokasi mata (FACE_COORDINATES)
  • kontur wajah (FACE_CONTOUR)
  • tingkat senyum (FACE_SMILE)
  • arah mata (FACE_GAZE)
  • flag menunjukkan jika baik mata (atau kedua mata) berkedip (FACE_BLINK)
  • yaw, pitch dan roll wajah (FACE_ORIENTATION)
  • dihasilkan atau turunan identifikasi (FACE_IDENTIFICATION)

Ada berlebihan untuk metode ini yang mengambil satu set enums (seperti dijelaskan di atas) untuk menampilkan poin harus disertakan, menghapus/meminimalkan perhitungan berlebihan.

Kita sekarang beralih ke memeriksa objek FaceData untuk mengekstrak identitas dan fitur. Pertama mari kita lihat bagaimana face recognition dilakukan.

Kode snippet berikut akan menggantikan komentar di atas // continued below (2).

Kami pertama kali meminta id ditugaskan orang melalui metode getPersonId. Ini akan mengembalikan -111 (FP_PERSON_NOT_REGISTERED) jika tidak ada identitas yang ada dalam album saat ini dimuat, jika tidak kembali id dari orang yang cocok dari album dimuat.

Jika ada tidak ada identitas, kemudian kami tambahkan melalui metode addPerson objek FacialProcessing, pass index dari item FaceData kita saat memeriksa. Metode tersebut mengembalikan id ditugaskan orang jika berhasil, jika tidak kembali kesalahan. Hal ini terjadi ketika mencoba untuk menambahkan identitas yang sudah ada.

Selain itu, ketika orang cocok dengan identitas yang disimpan di album dimuat, kita sebut objek FacialProcessing updatePerson metode, lewat itu id yang ada dan index item FaceData. Menambahkan orang berkali-kali meningkatkan kinerja pengakuan. Anda dapat menambahkan hingga sepuluh wajah untuk satu orang.

Baris terakhir hanya mengembalikan id terkait identitas dari database kami, memasukkan jika id orang sudah tidak ada.

Tidak ditampilkan di atas, tetapi contoh FaceData mengekspos getRecognitionConfidence metode untuk mengembalikan kepercayaan recognition (0-100). Tergantung pada kebutuhan Anda, Anda dapat menggunakan ini untuk mempengaruhi aliran.

Potongan terakhir menunjukkan bagaimana untuk query setiap fitur-fitur lainnya dari contoh FaceData. Dalam demo ini, kami tidak membuat menggunakan mereka, tetapi dengan sedikit imajinasi, saya yakin Anda dapat memikirkan cara untuk menempatkan mereka dengan baik.

Kode snippet berikut akan menggantikan komentar di atas // continued below (3).

Yang melengkapi kode pengolahan. Jika Anda kembali ke galeri dan tekan pada sebuah gambar, Anda harus melihatnya menyaring foto apapun yang tidak mengandung orang-orang yang diidentifikasi dalam foto yang dipilih.

Kesimpulan

Kami mulai tutorial ini berbicara tentang bagaimana teknologi dapat digunakan untuk membantu mengatur konten pengguna. Dalam konteks sadar komputasi, yang tujuannya adalah untuk menggunakan konteks sebagai isyarat implisit untuk memperkaya miskin interaksi manusia dengan komputer, sehingga lebih mudah untuk berinteraksi dengan komputer, hal ini dikenal sebagai auto-tagging. Dengan menandai atas isi dengan data yang lebih bermakna dan bermanfaat — untuk kedua komputer dan kami — kami memungkinkan untuk lebih cerdas filtering dan processing.

Kita telah melihat hal ini sering digunakan dengan konten tekstual, contoh yang paling jelas menjadi filter spam dan, lebih baru-baru ini, pembaca Berita, dengan media yang kaya konten, seperti foto, musik, dan video. Tool-tool seperti Snapdragon SDK memberikan kita kesempatan untuk mengekstrak bermakna fitur dari media yang kaya, mengekspos properti untuk pengguna dan komputer.

Hal ini tidak sulit untuk membayangkan bagaimana Anda bisa memperpanjang aplikasi kita untuk memungkinkan filtering berdasarkan sentimen dengan menggunakan senyum utama fitur atau kegiatan sosial oleh menghitung jumlah wajah. Satu implementasi tersebut dapat dilihat di fitur Smart Gallery ini.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.