Pengasuh RPi

Dari waktu ke waktu saya tergoda untuk melakukan sesuatu yang aneh. Jelas hal yang tidak berguna yang tidak membenarkan dirinya sendiri dalam hal jumlah investasi, dan enam bulan setelah pembuatannya, ia mengumpulkan debu di rak. Tapi di sisi lain, itu sepenuhnya membenarkan dirinya sendiri dalam hal jumlah emosi, pengalaman yang didapat dan cerita baru. Bahkan ada dua artikel saya tentang Habré tentang eksperimen semacam itu: Alcoorgan dan pemberi makan burung yang cerdas .



Baik. Saatnya berbicara tentang eksperimen baru. Bagaimana dia mengumpulkannya, apa yang dihasilkan dan bagaimana mengulanginya.







Saya didorong ke proyek baru oleh sebuah peristiwa, dalam arti, dangkal - seorang putra lahir. Saya mengatur untuk diri saya sendiri cuti sebulan sebelumnya. Tetapi anak itu ternyata diam - ada waktu luang. Dan meletakkan tempat tidur di sampingnya.



Banyak rumah yang berbedaperangkat keras tertanam untuk computer vision. Alhasil, saya memutuskan untuk membuat video nanny. Tapi tidak membosankan karena semua toko dipenuhi. Dan sesuatu yang lebih cerdas dan lebih menarik.



Artikel ini akan ditulis dengan gaya naratif untuk memahami bagaimana perkembangan mainan tersebut, kemana perginya dan kemana arah selanjutnya.



Artikel ini memiliki beberapa tambahan:



  1. Video di mana saya menunjukkan dan menceritakan bagaimana semuanya bekerja.
  2. Sebuah artikel kecil di VC, di mana saya memberi tahu Anda mengapa hal-hal seperti itu kemungkinan besar tidak akan datang ke produksi normal, dan tentang batasan sistem ML semacam ini.
  3. Macam segala sesuatu di github + gambar siap pakai untuk RPi. Di akhir artikel, penjelasan tentang cara menggunakannya.


Memilih ide



Fungsi monitor bayi yang paling umum adalah untuk melihat apa yang terjadi pada anak kapan saja. Sayangnya, ini tidak selalu berhasil. Anda tidak akan menonton siaran sepanjang waktu, itu tidak nyaman. Bayi umumnya dapat ditidurkan di dekat kepompong, mengapa video terus-menerus? Hasilnya, koleksi berikut disatukan untuk memulai:



  1. Sistem harus memungkinkan untuk menonton video atau foto kapan saja dari telepon
  2. Sistem harus merespons saat anak bangun, dan memberi tahu tentang hal itu
  3. Sistem harus mendeteksi wajah yang hilang untuk mencegah SIDS


Pemilihan platform



Saya memiliki artikel panjang tentang Habré tentang membandingkan berbagai platform. Secara global, untuk prototipe seperti yang saya lakukan, ada beberapa opsi:



  1. Jetson Nano. + ( Nano), , . . — TensorRT. . , , , TensorRT .
  2. VIM3. , . — .
  3. Raspberry PI + Movidius. . , , .
    1. , .
    2. . .
  4. Raspberry PI 4 - ketika bekerja melalui OpenCV, akan lebih baik untuk membuang jaringan terbuka, yang seharusnya sudah cukup. Tapi, ada kecurigaan bahwa performanya tidak akan cukup.
  5. Karang - Saya memilikinya di tangan saya, itu akan lulus dalam hal kinerja, tetapi di artikel saya yang lain ada tertulis mengapa saya tidak menyukainya :)


Total - Saya memilih Rpi + movidius. Saya memilikinya di tangan saya, saya bisa mengerjakannya.



Besi



Komputernya adalah Raspberry Pi 3B, neuroprocessornya adalah Movidius Myriad X. Ini bisa dimengerti.

Sisanya - tergores di bagian bawah laras, dibeli sebagai tambahan.







Kamera



Saya memeriksa tiga yang berbeda yang saya miliki:



  • Kamera dari RaspberryPI. Berisik, kabel tidak nyaman, tidak ada sambungan yang nyaman. Mencetak gol.
  • Semacam kamera IP. Sangat berguna karena tidak perlu dimasukkan dalam RPI. Kamera dipisahkan dari komputer. Ponsel saya bahkan punya dua mode, siang dan malam. Tetapi yang saya miliki tidak memberikan kualitas wajah yang memadai.
  • Webcam dari Genius. Saya sudah menggunakannya kurang lebih 5 tahun. Tapi belakangan ini ada yang tidak stabil. Tapi untuk RPI, pas. Selain itu, ternyata dapat dengan mudah dibongkar dan filter IR dihapus dari sana. Plus, ternyata nanti, ini adalah satu-satunya pilihan dengan mikrofon.






Dan filter berubah seperti ini:







Secara umum, jelas bahwa ini bukan solusi produk. Tapi itu berhasil.



Jika ada, maka dalam kode Anda akan melihat bagian yang tersisa untuk beralih ke dua jenis kamera lainnya. Mungkin bahkan sesuatu akan berhasil jika Anda mengubah 1-2 parameter.



Petir



Saya memiliki iluminator yang tergeletak dengan salah satu masalah lama.



Saya menyolder semacam catu daya untuk itu. Itu bersinar dengan baik.







Arahkan ke langit-langit - ruangan menyala.







Layar



Untuk beberapa mode operasi, saya membutuhkan monitor. Berhenti di sini . Meskipun saya tidak yakin apakah ini keputusan yang tepat. Mungkin seharusnya aku mengambil yang full-length. Tapi lebih dari itu nanti.







Nutrisi



Anak itu tidur di tempat yang sewenang-wenang. Jadi lebih mudah bila sistem ditenagai oleh power bank. Saya memilih ini, hanya karena di rumah untuk hiking:







OpenVino



Mari kita berjalan sedikit melalui OpenVino. Seperti yang saya katakan di atas, keuntungan besar dari OpenVino adalah banyaknya jaringan yang telah dilatih sebelumnya. Apa yang bisa bermanfaat bagi kami.



Deteksi wajah. Ada banyak jaringan seperti itu di OpenVino:



  1. 1
  2. 2
  3. 3


Pengakuan poin-poin penting di wajah . Kami membutuhkan ini untuk meluncurkan jaringan

orientasi wajah berikut . Aktivitas anak dan di mana dia memandang.

Pengenalan arah mata - jika Anda mencoba berinteraksi

Analisis kedalaman ? Mungkin itu akan menghasilkan

analisis Skeleton

Nah, banyak yang menarik lainnya ...



Kerugian utama dari jaringan ini adalah keuntungan utama mereka - pra-pelatihan mereka ...



Ini dapat diperbaiki, tetapi sekarang kami melakukan prototipe cepat, tujuan kami bukanlah bekerja dalam 100% kasus, tetapi pekerjaan mendasar yang akan membawa setidaknya beberapa manfaat.



Pergilah. Logika umum versi 1



Karena kami sedang mengembangkan perangkat tertanam, kami perlu berinteraksi dengannya. Terima foto / sinyal alarm. Jadi saya memutuskan untuk melakukan hal yang sama seperti ketika saya melakukan palung , melalui telegram. Tapi ingatlah.



Untuk versi pertama, saya memutuskan:



  • Luncurkan jaringan yang ditunjuk di RPi (Saya ingin semuanya sekaligus, tiba-tiba kinerja akan memungkinkan). Ini akan memungkinkan Anda melihat lebih banyak opsi untuk memecahkan masalah / kemungkinan cara pengembangan
  • Tulis template program umum.
  • Munculkan algoritme yang mengenali bangun.
  • Buat algoritme yang mengirimkan notifikasi kehilangan muka


Semuanya berjalan kurang lebih baik, terlepas dari sekumpulan bug di sekitar. Ini melekat dalam ComputerVision ... Saya sudah terbiasa.



Berikut adalah ringkasan singkat dari apa yang saya temukan:



  1. OpenVino RPi ( 2020) - from openvino.inference_engine import IECore. OpenVino ( OpenCV ), , .
  2. OpenVino , -generate_deprecated_IR_V7
  3. OpenVino ( , ) Movidius int 8 . int32 . RPi int8 . , .
  4. OpenVino . , OpenVino . , — .
  5. OpenVino , Intel ( , ).
  6. PyTorch 1.5 onnx, 1.4…


Tapi, begini caranya ... Saya yakin jika saya melalui TensorRT, maka akan ada lebih banyak masalah, seperti biasa.



Begitu. Semuanya disatukan, jaringan berjalan, kami mendapatkan sesuatu seperti ini (dengan menjalankan tumpukan di atas kepala, orientasi, poin-poin penting):







Dapat dilihat bahwa wajah akan sering hilang ketika anak menutupinya dengan tangan / memutar kepalanya. dan tidak semua indikator stabil.



Apa berikutnya? Bagaimana cara menganalisis tertidur?



Saya melihat kisi-kisi itu, dan hal pertama yang terlintas dalam pikiran adalah mengenali emosi. Saat anak tertidur dan diam, ada ekspresi netral di wajahnya. Tapi tidak sesederhana itu. Ini grafik biru tua, ini ekspresi netral anak yang tertidur selama satu jam:







Grafik lainnya adalah sedih / marah / gembira / terkejut. Bahkan tidak benar-benar inti dari apa yang ada dalam warna. Sayangnya, data jaringan tidak stabil, itulah yang kami lihat. Ketidakstabilan terjadi ketika:



  • Bayangan berlebihan di wajah (yang tidak jarang terjadi di malam hari)
  • Wajah anak itu tidak ada di set pelatihan OpenVino => sembarangan beralih ke emosi lain
  • Anak itu sebenarnya membuat wajah, termasuk dalam mimpi


Secara keseluruhan, saya tidak terkejut. Saya pernah menjumpai jaringan yang mengenali emosi sebelumnya, dan mereka selalu tidak stabil, termasuk karena ketidakstabilan transisi antar emosi - tidak ada batas yang jelas.



Oke, bangun tidak bisa dikenali dengan bantuan emosi. Sejauh ini, saya tidak ingin mengajar sesuatu sendiri, jadi saya memutuskan untuk mencoba berdasarkan jaringan yang sama, tetapi di sisi lain. Salah satu jaring memberikan sudut rotasi kepala. Ini sudah lebih baik (penyimpangan total dari melihat kamera dalam derajat). 5-10 menit terakhir sebelum bangun:







Lebih baik. Tapi ... Anak laki-laki itu mungkin mulai melambai-lambaikan kepalanya saat tidur. Atau sebaliknya, jika Anda menetapkan ambang batas yang besar - bangun dan jangan melambaikan kepala setelah itu. Untuk menerima pemberitahuan setiap saat ... Sayangnya:





(ada sekitar satu jam waktu tidur)



Jadi kami masih perlu melakukan pengenalan normal.



Masalah yang ditemui di versi 1



Mari kita rangkum semua yang saya tidak suka di versi pertama.



  1. Mulai otomatis. Tidak nyaman untuk memulai mainan ini lagi setiap kali, hubungkan melalui SSH, jalankan skrip pemantauan. Dalam hal ini, skrip harus:

    • Periksa status kamera. Kebetulan kamera dimatikan / tidak dicolokkan. Sistem harus menunggu pengguna menyalakan kamera.
    • Memeriksa status akselerator. Sama halnya dengan kamera.
    • Memeriksa jaringan. Saya ingin menggunakan barang itu baik di rumah maupun di negara. Atau mungkin di tempat lain. Dan sekali lagi, saya tidak ingin masuk melalui ssh => Saya perlu membuat algoritma untuk menghubungkan ke wiFi jika tidak ada Internet.
  2. Bangun, pelatihan jaringan. Pendekatan sederhana belum masuk, yang berarti perlu melatih neuron untuk mengenali mata terbuka.


Mulai otomatis



Secara umum skema autorun adalah sebagai berikut:



  • Saya meluncurkan program saya di awal. Bagaimana saya melakukannya - Saya menulis artikel terpisah, bukan untuk mengatakan bahwa itu sepele untuk melakukannya di RPi. Pendeknya:

    • OpenVino
    • , —
  • Movidius-
    • — QR- wifi
  • telegram . — QR-




Tidak ada jaringan pengenalan mata yang siap pakai di OpenVino.

Ha ha ha. Jaringan sudah muncul. Namun, ternyata, diluncurkan hanya setelah saya mulai mengembangkannya. Dan dalam rilis dan dokumentasinya, itu sudah muncul ketika saya kurang lebih melakukan segalanya. Sekarang saya sedang menulis artikel dan menemukan pembaruan .

Tapi, saya tidak akan mengulanginya, jadi saya menulis seperti yang saya lakukan.



Sangat mudah untuk melatih jaringan seperti itu. Di atas, saya mengatakan bahwa saya menggunakan pemilihan mata demi bingkai. Tidak ada yang tersisa: tambahkan simpanan semua mata yang bertemu di bingkai. Ternyata kumpulan data seperti itu:







Tetap menandai dan melatihnya. Saya menjelaskan proses penandaan lebih detail di sini (dan video proses selama 10 menit di sini). Toloka digunakan untuk menandai. Butuh ~ 2 jam untuk menyiapkan tugas, 5 menit untuk menandai + 300 rubel anggaran.



Ketika belajar, saya tidak ingin terlalu banyak berpikir, jadi saya sengaja mengambil jaringan yang cepat, yang kualitasnya cukup untuk menyelesaikan masalah - mobilenetv2. Seluruh kode, termasuk memuat kumpulan data, menginisialisasi dan menyimpan, membutuhkan waktu kurang dari 100 baris (sebagian besar diambil dari sumber terbuka, menulis ulang beberapa lusin baris):



Teks tersembunyi
import numpy as np
import torch
from torch import nn
from torch import optim
from torchvision import datasets, transforms, models



data_dir = 'F:/Senya/Dataset'
def load_split_train_test(datadir, valid_size = .1):
    train_transforms = transforms.Compose([transforms.Resize(64),
                                           transforms.RandomHorizontalFlip(),
                                           transforms.ToTensor(),
                                       ])
    test_transforms = transforms.Compose([transforms.Resize(64),
                                      transforms.ToTensor(),
                                      ])
    train_data = datasets.ImageFolder(datadir,
                    transform=train_transforms)
    test_data = datasets.ImageFolder(datadir,
                    transform=test_transforms)
    num_train = len(train_data)
    indices = list(range(num_train))
    split = int(np.floor(valid_size * num_train))
    np.random.shuffle(indices)
    from torch.utils.data.sampler import SubsetRandomSampler
    train_idx, test_idx = indices[split:], indices[:split]
    train_sampler = SubsetRandomSampler(train_idx)
    test_sampler = SubsetRandomSampler(test_idx)
    trainloader = torch.utils.data.DataLoader(train_data,
                   sampler=train_sampler, batch_size=64)
    testloader = torch.utils.data.DataLoader(test_data,
                   sampler=test_sampler, batch_size=64)
    return trainloader, testloader

trainloader, testloader = load_split_train_test(data_dir, .1)
print(trainloader.dataset.classes)

device = torch.device("cuda" if torch.cuda.is_available()
                                  else "cpu")
model = models.mobilenet_v2(pretrained=True)
model.classifier = nn.Sequential(nn.Linear(1280, 3),
                                 nn.LogSoftmax(dim=1))
print(model)
criterion = nn.NLLLoss()
optimizer = optim.Adam(model.parameters(), lr=0.003)
model.to(device)
epochs = 5
steps = 0
running_loss = 0
print_every = 10
train_losses, test_losses = [], []
for epoch in range(epochs):
    for inputs, labels in trainloader:
        steps += 1
        inputs, labels = inputs.to(device), labels.to(device)
        optimizer.zero_grad()
        logps = model.forward(inputs)
        loss = criterion(logps, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        if steps % print_every == 0:
            test_loss = 0
            accuracy = 0
            model.eval()
            with torch.no_grad():
                for inputs, labels in testloader:
                    inputs, labels = inputs.to(device), labels.to(device)
                    logps = model.forward(inputs)
                    batch_loss = criterion(logps, labels)
                    test_loss += batch_loss.item()

                    ps = torch.exp(logps)
                    top_p, top_class = ps.topk(1, dim=1)
                    equals = top_class == labels.view(*top_class.shape)
                    accuracy += torch.mean(equals.type(torch.FloatTensor)).item()
            train_losses.append(running_loss / len(trainloader))
            test_losses.append(test_loss / len(testloader))
            print(f"Epoch {epoch + 1}/{epochs}.. "
                  f"Train loss: {running_loss / print_every:.3f}.. "
                  f"Test loss: {test_loss / len(testloader):.3f}.. "
                  f"Test accuracy: {accuracy / len(testloader):.3f}")
            running_loss = 0
            model.train()
torch.save(model, 'EyeDetector.pth')




Dan beberapa baris lagi untuk menyimpan model di ONNX:



Teks tersembunyi
from torchvision import transforms
import torch
from PIL import Image

use_cuda=1
mobilenet = torch.load("EyeDetector.pth")
mobilenet.classifier = mobilenet.classifier[:-1]
mobilenet.cuda()
img = Image.open('E:/OpenProject/OpenVinoTest/face_detect/EyeDataset/krnwapzu_left.jpg')
mobilenet.eval()
transform = transforms.Compose([transforms.Resize(64),
                                      transforms.ToTensor(),
                                      ])

img = transform(img)
img = torch.unsqueeze(img, 0)
if use_cuda:
    img = img.cuda()
img = torch.autograd.Variable(img)
list_features = mobilenet(img)

ps = torch.exp(list_features.data.cpu())
top_p, top_class = ps.topk(1, dim=1)

list_features_numpy = []
for feature in list_features:
    list_features_numpy.append(feature.data.cpu().numpy())
mobilenet.cpu()
x = torch.randn(1, 3, 64, 64, requires_grad=True)
torch_out = mobilenet(x)

torch.onnx.export(mobilenet, x,"mobilnet.onnx", export_params=True, opset_version=10, do_constant_folding=True,
input_names = ['input'],output_names = ['output'])
print(list_features_numpy)




Menyimpan model di ONNX diperlukan untuk memanggil model lebih lanjut di Open Vino. Saya tidak repot-repot mengonversi ke int8, saya membiarkan modelnya seperti dalam format 32-bit.



Analisis akurasi, metrik kualitas? .. Mengapa ini dalam proyek amatir. Hal-hal seperti itu dihargai berbeda. Tidak ada metrik yang akan memberi tahu Anda "sistem berfungsi". Apakah sistem bekerja atau tidak, Anda hanya akan mengerti dalam praktiknya. Bahkan 1% kesalahan dapat membuat sistem tidak menyenangkan untuk digunakan. Saya kebetulan sebaliknya. Seperti kesalahan 20%, tetapi sistem dikonfigurasi sehingga tidak terlihat.



Hal-hal seperti itu lebih mudah dilihat dalam praktiknya, "akan berhasil atau tidak." Dan setelah memahami kriteria pekerjaan - untuk memasukkan metrik, jika diperlukan.



Masalah versi 2



Implementasi saat ini berbeda secara kualitatif, tetapi masih memiliki sejumlah masalah:



  • . , :

    • - â…“ .


  • . . , , . , .
  • . ?


?



Saya tidak melatih ulang deteksi wajah. Tidak seperti pengenalan mata, ini lebih banyak pekerjaan. Dan dengan kumpulan dataset, dan dengan pelatihan yang berkualitas.



Tentu saja, Anda dapat melakukannya di muka putra Anda, bahkan mungkin sedikit lebih baik akan berfungsi daripada jaringan saat ini. Tetapi bagi orang-orang lainnya, tidak. Dan, mungkin, untuk anak saya dalam 2 bulan - juga tidak.

Mengumpulkan set data normal membutuhkan waktu lama.



Suara



Dimungkinkan untuk mengikuti jalur klasik pengenalan suara dan melatih neuron. Secara umum, itu tidak akan lama, paling banyak beberapa kali lebih lama dari pengenalan mata. Tapi saya tidak ingin main-main dengan mengumpulkan dataset, jadi saya menggunakan cara yang lebih mudah. Anda dapat menggunakan alat WebRTC yang sudah jadi . Semuanya ternyata elegan dan sederhana, dalam beberapa baris.



Kerugian yang saya temukan adalah kualitas solusi berbeda pada mikrofon yang berbeda. Di suatu tempat dipicu dengan mencicit, dan di suatu tempat hanya dengan teriakan nyaring.



Silakan, apa lagi



Pada titik tertentu, saya melakukan tes dengan memutar video 5 detik berulang tentang diri saya dengan istri saya:







Jelas bahwa anak laki-laki itu menempel ke wajah orang-orang yang terlihat (monitor menggantungnya selama 30 menit). Dan lahirlah ide: membuat kontrol ekspresi wajah. Ini bukan hanya video statis, tetapi opsi interaksi. Ternyata sesuatu seperti ini (ketika emosi anak laki-laki itu berubah, urutan videonya berganti):





"Ayah, apakah kamu sialan?!"



Mungkin harus mencoba dengan monitor besar. Tapi saya belum siap.



Mungkin Anda perlu mengganti video yang sedang diputar. Untungnya, ini sederhana - video diputar dari gambar terpisah, di mana perubahan bingkai disesuaikan dengan FPS.



Mungkin Anda perlu menunggu (pada level saat ini, anak mungkin tidak memahami hubungan antara emosinya dan layar)



Lalu?



Salah satu arahan yang paling menjanjikan, menurut saya, adalah mencoba mengontrol beberapa objek fisik / lampu / motor melalui arah pandang / pose.



Namun sejauh ini saya belum terlalu memikirkan masalah ini secara mendalam. Sebaliknya, untuk saat ini, saya akan menguji manajemen emosi.



Bagaimana tampilannya pada akhirnya, deskripsi, pemikiran



Bagaimana semuanya bekerja sekarang (ada video yang lebih besar di awal artikel):



  • Semua kontrol melewati Telegram + melalui kamera.
  • Jika Anda tidak perlu mengontrol video dengan emosi, maka seluruh perangkat akan terlihat seperti ini:





  • Ini dimulai dengan menyalakan power bank.
  • Jika ada jaringan yang terhubung, maka perangkat tersebut sudah siap bekerja
  • Jika tidak ada jaringan, maka Anda perlu menunjukkan kode QR dengan jaringan, sistem akan mulai secara otomatis
  • Melalui Telegramm, Anda dapat memilih serangkaian peristiwa untuk dipantau:





  • Setiap kali terjadi peristiwa menarik, notifikasi dikirimkan:





  • Kapan saja, Anda dapat meminta foto dari perangkat untuk melihat apa yang terjadi



Secara umum, ulasan dari orang yang dicintai:



  1. Detektor wajah tidak berfungsi dengan baik. Ini benar-benar fitur pendeteksi yang tidak disetel untuk anak-anak. Biasanya, ini tidak mengganggu deteksi saat bangun (setidaknya beberapa foto normal dengan mata terbuka akan muncul). Tidak ada rencana untuk berlatih ulang sekarang.
  2. Tanpa layar, peluncuran yang sedikit buram (apakah kode QR dibaca atau tidak). Dan ada banyak kabel dengan layarnya. Saya pikir opsi yang paling benar adalah meletakkan dioda pada GPIO. Dan menyalakannya tergantung pada status (ada koneksi, kamera tidak berfungsi, Movidius tidak berfungsi, tidak ada koneksi ke telegram, dll.). Tapi belum selesai
  3. Mengamankan kamera terkadang sulit. Karena saya memiliki sepasang tripod, entah bagaimana saya bisa mengaturnya. Dan tanpa mereka, mungkin, tidak ada yang berhasil.
  4. Benar-benar memungkinkan Anda untuk meluangkan waktu dan memberikan kebebasan bergerak. Apakah ini lebih dari sekadar monitor bayi / monitor video dengan streaming? Saya tidak tahu. Mungkin sedikit lebih mudah.
  5. Hal keren untuk eksperimen.


Bagaimana cara meluncurkan



Seperti yang saya katakan di atas - saya mencoba meletakkan semua sumber. Proyeknya besar dan bercabang, jadi mungkin saya lupa sesuatu atau tidak memberikan alat yang detail. Jangan ragu untuk bertanya dan mengklarifikasi.



Ada beberapa cara untuk mengembangkan semuanya:



  1. Sors dari github. Ini adalah metode yang lebih rumit, perlu waktu lama untuk mengkonfigurasi RPi, mungkin saya lupa sesuatu. Tetapi Anda memiliki kendali penuh atas proses tersebut (termasuk pengaturan RPi).
  2. Gunakan gambar yang sudah jadi. Di sini kita dapat mengatakan bahwa itu tanpa belas kasihan dan tidak aman. Tapi itu jauh lebih mudah.


Github



Repositori utama terletak di sini - github.com/ZlodeiBaal/BabyFaceAnalizer

Ini terdiri dari dua file yang perlu Anda jalankan:



  1. Script untuk inisialisasi / memeriksa status / pengaturan jaringan adalah QRCode.py (untuk script ini, ingat, ada yang lebih rinci deskripsi ). Dia menghubungkan WiFi dan memeriksa apakah ada pengaturan untuk bot di Telegram.
  2. Skrip kerja utama adalah face.py


Selain. ada dua hal yang hilang di Git:



  1. File kredensial WiFi - wpa_supplicant_auto.conf
  2. File dengan kredensial bot Telegram - tg_creedential.txt


Anda dapat membiarkan sistem membuatnya secara otomatis pada startup berikutnya. Anda dapat menggunakan yang berikut ini dengan mengisi kolom kosong:



tg_creedential.txt
token to access the HTTP API — , @BotFather telegram "/newbot"

socks5://… — ,

socks5 — ,

socks5 — ,



wpa_supplicant_auto.conf
network={

ssid="******"

psk="*******"

proto=RSN

key_mgmt=WPA-PSK

pairwise=CCMP

auth_alg=OPEN

}



Peluit tuning RPi dan palsu



Sayangnya, hanya menempatkan dan menjalankan skrip pada RPi tidak akan berhasil. Inilah hal lain yang Anda butuhkan untuk pekerjaan yang stabil:



  1. Instal l_openvino_toolkit_runtime_raspbian_p_2020.1.023.tgz sesuai dengan petunjuk - docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_raspbian.html
  2. Instal autorun
  3. Hapus pesan tentang kata sandi default (mungkin tidak perlu, tetapi itu mengganggu saya) - sudo apt purge libpam-chksshpwd
  4. matikan screensaver - www.raspberrypi.org/forums/viewtopic.php?t=260355
  5. Untuk deteksi audio:



    • pip3 instal webrtcvad
    • sudo apt-get install python-dev
    • sudo apt-get install portaudio19-dev
    • sudo pip3 menginstal pyaudio
  6. Unduh model dari repositori OpenVino menggunakan skrip “Get_models.py” di folder “Model”


Bentuk



Gambar diposting di sini (5 pertunjukan).



Beberapa poin:



  1. Standar login-password digunakan (pi, raspberry)
  2. Akses SSH diaktifkan
  3. Secara default, WiFi tidak terhubung dan alamat bot di keranjang yang akan digunakan sistem untuk pemantauan tidak dikonfigurasi.


Cara mengatur WiFi dalam gambar



Opsi pertama adalah menampilkan kode QR dengan teks setelah peluncuran:



WIFI:T:WPA;P:qwerty123456;S:TestNet;;


Dimana setelah P adalah kata sandi jaringan, setelah S adalah pengenal jaringan.



  1. Jika Anda memiliki ponsel dengan Android 10, maka kode QR tersebut dibuat secara otomatis saat Anda mengklik "berbagi jaringan"
  2. Jika tidak, maka Anda dapat membuatnya di www.the-qrcode-generator.com


Opsi kedua adalah SSH ke RPi (dengan menghubungkan melalui kabel). Atau nyalakan monitor dan keyboard. Dan letakkan file tersebut



wpa_supplicant_auto.conf
network={

ssid="*********"

psk="*******"

proto=RSN

key_mgmt=WPA-PSK

pairwise=CCMP

auth_alg=OPEN

}



dengan pengaturan wi-fi Anda ke folder "/ home / pi / face_detect".



Cara mengatur bot telegram dalam gambar



Opsi pertama adalah menampilkan kode QR dengan teks setelah peluncuran:



tg_creedential.txt
token to access the HTTP API — , @BotFather telegram "/newbot"

socks5://… — ,

socks5 — ,

socks5 — ,



dengan menghasilkannya melalui www.the-qrcode-generator.com

Opsi kedua adalah SSH ke dalam RPi (dengan menghubungkan melalui kabel). Atau nyalakan monitor dan keyboard. Dan letakkan file tg_creedential.txt yang dijelaskan di atas di folder "/ home / pi / face_detect".



Komentar tentang masa kecil



Saat saya menyusun versi pertama dan menunjukkannya kepada ibu saya, saya menerima jawaban tiba-tiba:

"Oh, dan kami melakukan hal yang hampir sama di masa kecil Anda."

"?!"

"Nah, mereka meletakkan kereta dorong bersamamu di balkon, melemparkan mikrofon melalui jendela, yang termasuk dalam amplifier di apartemen."


Secara umum, tiba-tiba ternyata itu turun-temurun.



Komentar tentang pasangan



"Bagaimana reaksi istri Anda?"

“Bagaimana dia membiarkanmu bereksperimen pada putramu ?!”

Mereka bertanya lebih dari sekali.

Tapi, saya menghancurkan istri saya dengan baik. Di sini, dia bahkan terkadang menulis artikel tentang Habré.



PS1



Saya bukan spesialis keamanan informasi. Tentu saja, saya mencoba memastikan bahwa tidak ada kata sandi yang ditampilkan di mana pun, dll., Dan semua orang dapat mengonfigurasi sendiri, yang menunjukkan semua informasi keamanan setelah memulai.



Tetapi saya tidak mengecualikan bahwa saya melewatkan sesuatu di suatu tempat. Jika Anda melihat kesalahan yang jelas, saya akan mencoba memperbaikinya.



PS2



Kemungkinan besar, saya akan berbicara tentang pembaruan untuk proyek ini di saluran telegram saya , atau di grup VKontakte . Jika saya mengumpulkan banyak hal menarik, maka saya akan membuat publikasi lain di sini.



All Articles