حسنا. حان الوقت للحديث عن تجربة جديدة. كيف جمعه وماذا جاء منه وكيفية تكراره.
لقد دفعتني إلى مشروع جديد من خلال حدث ما ، بمعنى ما ، عادي - ولد ابن. رتبت لنفسي إجازة شهرية مقدما. لكن تبين أن الطفل كان هادئًا - كان هناك وقت فراغ. ووضع النوم بجانبه.
العديد من المنازل المختلفةالأجهزة المضمنة لرؤية الكمبيوتر. نتيجة لذلك ، قررت أن أصنع مربية فيديو. ولكن ليست مملة مثل جميع المتاجر مليئة. وشيء أكثر ذكاءً وإثارة للاهتمام.
سيُكتب المقال في سياق سردي لفهم كيفية تطور اللعبة ، وأين جاءت وأين ستذهب بعد ذلك.
المقال له عدة إضافات:
- فيديو حيث أعرض وأخبر كيف يعمل كل شيء.
- مقال صغير عن رأس المال المغامر ، حيث أخبرك عن سبب عدم ظهور مثل هذه الأشياء على الأرجح في الإنتاج الطبيعي ، وحول قيود أنظمة تعلم الآلة من هذا النوع.
- أنواع كل شيء على جيثب + صورة جاهزة لـ RPi. في نهاية المقال ، وصف لكيفية استخدامه.
اختيار فكرة
الوظيفة الأكثر شيوعًا لجهاز مراقبة الأطفال هي رؤية ما يحدث للطفل في أي وقت. لسوء الحظ ، هذا لا يعمل دائمًا. لن تشاهد البث طوال الوقت ، فهو غير مناسب. يمكن وضع الطفل بشكل عام للنوم في مكان قريب في شرنقة ، فلماذا يتم الفيديو طوال الوقت؟ نتيجة لذلك ، تم تجميع المجموعة التالية معًا لتبدأ بـ:
- يجب أن يتيح النظام إمكانية مشاهدة مقطع فيديو أو صورة في أي وقت من الهاتف
- يجب أن يستجيب النظام لاستيقاظ الطفل ، والإخطار بذلك
- يجب أن يكتشف النظام الوجه المفقود لمنع SIDS
اختيار المنصة
كان لدي مقال طويل عن حبري حول مقارنة المنصات المختلفة. على الصعيد العالمي ، هناك عدة خيارات لنموذج أولي مثل ما أفعله:
- Jetson Nano. + ( Nano), , . . — TensorRT. . , , , TensorRT .
- VIM3. , . — .
- Raspberry PI + Movidius. . , , .
- , .
- . .
- Raspberry PI 4 - عند العمل من خلال OpenCV ، سيكون من الجيد التخلص من الشبكات المفتوحة ، والتي يجب أن تكون كافية. لكن كان هناك شك في أنه لن يكون هناك أداء كافٍ.
- كورال - لدي في يدي، فإنه سيمر من حيث الأداء، ولكن في بلدي الأخرى المادة هو مكتوب لماذا أنا لا أحب ذلك :)
لذلك ، اخترت Rpi + movidius. لدي في يدي ، يمكنني العمل معها.
حديد
الكمبيوتر هو Raspberry Pi 3B ، والمعالج العصبي هو Movidius Myriad X. وهذا واضح.
الباقي - كشط على طول الجزء السفلي من البرميل ، تم شراؤه بالإضافة إلى ذلك.
الة تصوير
راجعت ثلاثة أنواع مختلفة لدي:
- كاميرا من RaspberryPI. كابل مزعج وصاخب ، لا يوجد مرفق ملائم. يحرز هدف.
- نوع من كاميرات IP. مفيد جدًا لأنه لا يلزم تضمينه في RPI. الكاميرا مفصولة عن الكمبيوتر. حتى أن زنزانتي بها وضعان ، ليلا ونهارا. لكن الذي كنت أمتلكه لم يعط جودة كافية للوجه
- كاميرا ويب من Genius. لقد كنت أستخدمه منذ حوالي 5 سنوات. لكن شيئًا ما أصبح غير مستقر مؤخرًا. ولكن بالنسبة لـ RPI ، فقط صحيح. علاوة على ذلك ، اتضح أنه يمكن تفكيكها بسهولة وإزالة مرشح الأشعة تحت الحمراء من هناك. بالإضافة إلى ذلك ، كما اتضح لاحقًا ، كان هذا هو الخيار الوحيد مع ميكروفون.
ويتغير الفلتر على النحو التالي:
بشكل عام ، من الواضح أن هذا ليس حلاً للمنتج. لكنها تعمل.
إذا كان هناك أي شيء ، فسترى في الكود الأجزاء المتبقية للتبديل إلى النوعين الآخرين من الكاميرات. ربما حتى شيء ما سينجح تمامًا إذا قمت بتغيير معلمتين أو اثنين.
إضاءة
كان لدي منور ملقى مع أحد الألغاز القديمة.
لقد قمت بلحام نوع من مصدر الطاقة به. يضيء جيدًا.
أشرها إلى السقف - الغرفة مضاءة.
شاشة
بالنسبة لبعض أوضاع التشغيل ، كنت بحاجة إلى شاشة. توقف عند هذا . على الرغم من أنني لست متأكدًا مما إذا كان هذا هو القرار الصحيح. ربما كان علي أخذ الطول الكامل. ولكن أكثر عن ذلك لاحقا.
التغذية
ينام الطفل في أماكن عشوائية. لذلك يكون الأمر أسهل عندما يكون النظام مدعومًا من خلال بنك طاقة. اخترت هذا ، ببساطة لأنه يقع في المنزل للتنزه:
OpenVino
دعنا نسير قليلاً من خلال OpenVino. كما قلت أعلاه ، فإن الميزة الكبيرة لـ OpenVino هي العدد الكبير من الشبكات المدربة مسبقًا. ما يمكن أن يكون مفيد لنا.
الكشف عن الوجه. هناك العديد من هذه الشبكات في OpenVino:
التعرف على النقاط الرئيسية على الوجه . نحتاج إلى هذا من أجل إطلاق شبكات
توجيه الوجه التالية . نشاط الطفل وأين يبحث.
التعرف على اتجاه العين - إذا حاولت التفاعل مع
تحليل العمق ؟ ربما سينتج عنه
تحليل الهيكل العظمي
حسنًا ، العديد من الأشياء الأخرى المثيرة للاهتمام ...
العيب الرئيسي لهذه الشبكات سيكون ميزتها الرئيسية - تدريبهم المسبق ...
يمكن تصحيح هذا ، لكننا الآن نقوم بعمل نموذج أولي سريع ، هدفنا ليس العمل في 100٪ من الحالات ، ولكن العمل من حيث المبدأ سيجلب على الأقل بعض الفوائد.
اذهب. إصدار المنطق العام 1
نظرًا لأننا نطور جهازًا مضمنًا ، فنحن بحاجة إلى التفاعل معه بطريقة ما. استقبال الصور / إشارات التنبيه. لذلك قررت أن أفعل الشيء نفسه كما فعلت عندما فعلت الحوض الصغير ، عبر البرقيات. لكن تذكر.
بالنسبة للإصدار الأول ، قررت:
- قم بتشغيل الشبكات المحددة على RPi (أرغب في كل شيء دفعة واحدة ، وسيسمح الأداء فجأة). سيسمح لك ذلك برؤية المزيد من الخيارات لحل المشكلة / الطرق المحتملة للتطوير
- اكتب قالب برنامج عام.
- ابتكر خوارزمية تتعرف على الاستيقاظ.
- قم بعمل خوارزمية ترسل إشعارًا بفقدان الوجه
سار كل شيء بشكل جيد أو أقل ، باستثناء مجموعة من الأخطاء في كل مكان. هذا متأصل في ComputerVision ... لقد تعودت على ذلك.
فيما يلي ملخص سريع لما صادفته:
- OpenVino RPi ( 2020) - from openvino.inference_engine import IECore. OpenVino ( OpenCV ), , .
- OpenVino , -generate_deprecated_IR_V7
- OpenVino ( , ) Movidius int 8 . int32 . RPi int8 . , .
- OpenVino . , OpenVino . , — .
- OpenVino , Intel ( , ).
- PyTorch 1.5 onnx, 1.4…
ولكن ، إليك الطريقة ... أنا متأكد من أنه إذا مررت بـ TensorRT ، فستكون هناك المزيد من المشاكل ، كما هو الحال دائمًا.
وبالتالي. يتم تجميع كل شيء معًا ، تعمل الشبكات ، نحصل على شيء مثل هذا (عن طريق تشغيل المكدس فوق الرأس ، والتوجيه ، والنقاط الرئيسية):
يمكن ملاحظة أن الوجه غالبًا ما يضيع عندما يغطيه الطفل بيديه / يدير رأسه. وليست كل المؤشرات مستقرة.
ماذا بعد؟ كيف تحلل النوم؟
أنظر إلى تلك الشبكات ، وأول ما يتبادر إلى الذهن هو التعرف على المشاعر. عندما يكون الطفل نائمًا وهادئًا ، هناك تعبير محايد على وجهه. لكن الأمر ليس بهذه البساطة. هنا رسم بياني أزرق غامق ، هذا تعبير محايد لطفل نائم لمدة ساعة:
بقية الرسوم البيانية حزينة / غاضبة / فرحة / مفاجأة. ولا حتى جوهر ما هو موجود في الألوان. لسوء الحظ ، فإن بيانات الشبكة غير مستقرة ، وهذا ما نراه. يحدث عدم الاستقرار عندما:
- الظل المفرط على الوجه (وهو أمر شائع في الليل)
- لم تكن وجوه الطفل في مجموعة تدريب OpenVino => التبديل التعسفي إلى المشاعر الأخرى
- في الواقع يصنع الطفل الوجوه ، بما في ذلك في الحلم
بشكل عام ، لم أتفاجأ. لقد واجهت شبكات تتعرف على المشاعر من قبل ، وهي دائمًا غير مستقرة ، بما في ذلك بسبب عدم الاستقرار في الانتقال بين المشاعر - لا توجد حدود واضحة.
حسنًا ، لا يمكن التعرف على الاستيقاظ بمساعدة العواطف. حتى الآن ، لم أرغب في تعليم شيء ما بنفسي ، لذلك قررت أن أحاول على أساس نفس الشبكات ، ولكن على الجانب الآخر. تعطي إحدى الشبكات زاوية دوران الرأس. هذا أفضل بالفعل (الانحراف الكلي عن النظر إلى الكاميرا في الوقت المناسب بالدرجات). آخر 5-10 دقائق قبل الاستيقاظ:
أفضل. لكن ... قد يبدأ الابن في التلويح برأسه أثناء نومه. أو العكس ، إذا قمت بتعيين عتبة كبيرة - استيقظ ولا تلوح برأسك بعد ذلك. لتلقي إشعار في كل مرة ... للأسف:
(هناك حوالي ساعة نوم)
لذلك ما زلنا بحاجة إلى القيام بالتعرف الطبيعي.
المشكلات التي تمت مواجهتها في الإصدار 1
دعونا نلخص كل ما لم يعجبني في الإصدار الأول.
- بدء تلقائي. ليس من المناسب بدء تشغيل هذه اللعبة مرة أخرى في كل مرة ، والاتصال عبر SSH ، وتشغيل البرنامج النصي للمراقبة. في هذه الحالة ، يجب أن:
- تحقق من حالة الكاميرا. يحدث أن تم إيقاف تشغيل الكاميرا / عدم توصيلها. يجب أن ينتظر النظام حتى يقوم المستخدم بتشغيل الكاميرا.
- فحص حالة المسرع. نفس الشيء كما هو الحال مع الكاميرا.
- فحص الشبكة. أريد استخدام الشيء في المنزل وفي البلد. أو ربما في مكان آخر. ومرة أخرى ، لا أريد تسجيل الدخول عبر ssh => أحتاج إلى إنشاء خوارزمية للاتصال بشبكة wiFi إذا لم يكن هناك إنترنت.
- الاستيقاظ ، تدريب الشبكة. لم يتم إدخال الأساليب البسيطة ، لذلك من الضروري تدريب الخلايا العصبية على التعرف على العيون المفتوحة.
بدء تلقائي
بشكل عام ، يكون مخطط التشغيل التلقائي كما يلي:
- أطلق برنامجي في البداية. كيف أفعل ذلك - لقد كتبت مقالًا منفصلاً ، كي لا أقول إنه من التافه القيام بذلك على RPi. بالمختصر:
- OpenVino
- , —
- Movidius-
-
- — QR- wifi
- telegram . — QR-
ها ها ها ها. ظهرت الشبكة بالفعل. ولكن ، كما اتضح ، تم إطلاقه فقط بعد أن بدأت في التطوير. وفي الإصدار والتوثيق ، ظهر بالفعل عندما فعلت كل شيء أكثر أو أقل. الآن كنت أكتب مقالًا ووجدت تحديثًا .
لكنني لن أعيدها ، لذا أكتب كما فعلت.
من السهل جدًا تدريب مثل هذه الشبكة. أعلاه ، قلت إنني استخدمت اختيار العيون بالإطار. لم يتبق شيء: أضف حفظًا لجميع العيون التي اجتمعت في الإطار. اتضح أن مجموعة البيانات هذه:
يبقى تحديدها وتدريبها. لقد وصفت عملية وضع العلامات بمزيد من التفصيل هنا (وفيديو للعملية لمدة 10 دقائق هنا). تم استخدام تولوكا لوضع العلامات. استغرق الأمر ساعتين تقريبًا لإعداد المهمة ، و 5 دقائق لترميز + 300 روبل من الميزانية.
عندما كنت أتعلم ، لم أكن أرغب في التفكير كثيرًا ، لذلك أخذت شبكة سريعة بشكل متعمد ، وهي ذات جودة كافية لحل المشكلة - mobilenetv2. استغرق الكود بأكمله ، بما في ذلك تحميل مجموعة البيانات ، والتهيئة والحفظ ، أقل من 100 سطر (مأخوذ في الغالب من مصادر مفتوحة ، وأعاد كتابة بضع عشرات من الأسطر):
نص مخفي
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')
وسطران إضافيان لحفظ النموذج في ONNX:
نص مخفي
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)
يعد حفظ النموذج في ONNX ضروريًا لاستدعاء النموذج في Open Vino. لم أزعج نفسي بالتحويل إلى int8 ، تركت النموذج كما كان في تنسيق 32 بت.
تحليل الدقة ومقاييس الجودة؟ .. لماذا هو في مشروع للهواة. يتم تسعير هذه الأشياء بشكل مختلف. لن يخبرك أي مقياس "النظام يعمل". سواء كان النظام يعمل أم لا ، ستفهم فقط في الممارسة. حتى 1٪ من الأخطاء قد تجعل استخدام النظام غير سار. أنا أكون العكس. مثل أخطاء 20٪ ، ولكن تم تكوين النظام بحيث لا تكون مرئية.
مثل هذه الأشياء أسهل للنظر في الممارسة ، "ستنجح أم لا." وبعد أن فهمت بالفعل معيار العمل - لإدخال المقاييس ، إذا لزم الأمر.
قضايا الإصدار 2
التنفيذ الحالي مختلف نوعيا ، ولكن لا يزال لديه عدد من المشاكل:
- . , :
- - ⅓ .
- . . , , . , .
- . ?
?
لم أعد تدريب اكتشاف الوجه. على عكس التعرف على العين ، فإن هذا يتطلب الكثير من العمل. ومع مجموعة البيانات والتدريب الجيد.
بالطبع ، يمكنك القيام بذلك على وجه ابنك ، وربما تعمل بشكل أفضل قليلاً من الشبكة الحالية. لكن بالنسبة لبقية الناس ، لا. وربما لابني في شهرين - أيضًا لا.
يستغرق جمع مجموعة البيانات العادية وقتًا طويلاً.
صوت
سيكون من الممكن اتباع المسار الكلاسيكي للتعرف على الصوت وتدريب الخلايا العصبية. بشكل عام ، لن يكون طويلًا جدًا ، في أغلب الأحيان أطول من التعرف على العين. لكنني لم أرغب في العبث بجمع مجموعة البيانات ، لذلك استخدمت طريقة أسهل. يمكنك استخدام أدوات WebRTC الجاهزة . كل شيء يتضح أنه أنيق وبسيط ، في سطرين.
العيب الذي وجدته هو أن جودة الحل تختلف باختلاف الميكروفونات. في مكان ما أطلق صرير ، وفي مكان ما فقط بصوت عالٍ.
تفضل ، ماذا بعد
في مرحلة ما ، أجريت اختبارًا عن طريق تشغيل مقطع فيديو مدته 5 ثوانٍ لنفسي مع زوجتي:
كان من الواضح أن الابن كان يلتصق بوجوه الأشخاص في مجال الرؤية (علقه جهاز العرض لمدة 30 دقيقة). وولدت الفكرة: التحكم في تعابير الوجه. هذا ليس مجرد فيديو ثابت ، ولكنه خيار تفاعل. اتضح أن شيئًا من هذا القبيل (عندما تتغير عاطفة الابن ، يتغير تسلسل الفيديو):
"أبي ، هل أنت سخيف؟!"
ربما يجب أن تحاول مع شاشة كبيرة. لكنني لست مستعدًا بعد.
ربما تحتاج إلى استبدال الفيديو قيد التشغيل. لحسن الحظ ، الأمر بسيط - يتم تشغيل الفيديو من صور منفصلة ، حيث يتم ضبط تغيير الإطار على FPS.
ربما تحتاج إلى الانتظار (في المستوى الحالي ، قد لا يفهم الطفل ببساطة العلاقة بين مشاعره والشاشة)
وثم؟
يبدو لي أن أحد أكثر الاتجاهات الواعدة هو محاولة التحكم في بعض الأشياء المادية / الأضواء / المحركات من خلال اتجاه الرؤية / الوضع.
لكن حتى الآن لم أفكر بعمق في هذه المسألة. بدلاً من ذلك ، في الوقت الحالي ، سأختبر إدارة المشاعر.
كيف يبدو في النهاية ، الوصف ، الأفكار
كيف يعمل كل شيء الآن (يوجد فيديو أكبر في بداية المقال):
- كل التحكم يمر عبر Telegramm + من خلال الكاميرا.
- إذا لم تكن بحاجة إلى التحكم في الفيديو بالعواطف ، فسيبدو الجهاز بأكمله كما يلي:
- يتم تشغيله عن طريق تشغيل الطاقة على بنك الطاقة.
- إذا كانت هناك شبكة متصلة ، فهذا يعني أن الجهاز جاهز بالفعل للاستخدام
- إذا لم تكن هناك شبكة ، فأنت بحاجة إلى إظهار رمز الاستجابة السريعة مع الشبكة ، وسيبدأ النظام تلقائيًا
- من خلال Telegramm ، يمكنك تحديد مجموعة من الأحداث لمراقبتها:
- في كل مرة يقع فيها حدث مثير للاهتمام ، يتم إرسال إشعار:
- يمكنك في أي وقت طلب صورة من الجهاز لترى ما يحدث
بشكل عام ، تقييمات من أحد أفراد أسرته:
- لا يعمل كاشف الوجه جيدًا. هذه حقًا ميزة لأي أجهزة كشف لم يتم ضبطها للأطفال. عادة ، لا يتداخل هذا مع اكتشاف الاستيقاظ (ستظهر على الأقل صورتان عاديتان بعيون مفتوحة). لا توجد خطط لإعادة التدريب الآن.
- بدون شاشة ، إطلاق معتم قليلاً (سواء تمت قراءة رمز الاستجابة السريعة أم لا). وهناك الكثير من الأسلاك مع الشاشة. أعتقد أن الخيار الصحيح هو وضع الثنائيات على GPIOs. وقم بإضاءةهم حسب الحالة (يوجد اتصال ، الكاميرا لا تعمل ، Movidius لا يعمل ، لا يوجد اتصال بالتلجرام ، إلخ). لكن لم يتم ذلك بعد
- من الصعب أحيانًا تأمين الكاميرا نظرًا لأن لدي زوجًا من حوامل ثلاثية القوائم ، يمكنني إدارة بطريقة ما. ولولاهم ، ربما ، لن ينجح شيء.
- حقًا يسمح لك بإخلاء بعض الوقت وإعطاء حرية الحركة. أكثر من جهاز مراقبة الطفل العادي؟ لا اعرف. ربما أسهل قليلاً.
- أشياء رائعة للتجربة.
كيف تطلق
كما قلت أعلاه - حاولت توضيح جميع المصادر. المشروع كبير ومتشعب ، لذلك ربما نسيت شيئًا أو لم أعطي أدوات مفصلة. لا تتردد في السؤال والتوضيح.
هناك عدة طرق لتوسيع كل شيء:
- صور من جيثب. هذه طريقة أكثر تعقيدًا ، وسوف يستغرق الأمر وقتًا طويلاً لتكوين RPi ، وربما نسيت شيئًا ما. لكن لديك سيطرة كاملة على العملية (بما في ذلك إعدادات RPi).
- استخدم صورة جاهزة. هنا يمكننا أن نقول أنه لا رحمة وغير آمن. لكنها أسهل بكثير.
جيثب
يوجد المستودع الرئيسي هنا - github.com/ZlodeiBaal/BabyFaceAnalizer
ويتكون من ملفين تحتاج إلى تشغيلهما:
- البرنامج النصي لتهيئة / التحقق من حالة / إعداد الشبكة هو QRCode.py (لهذا البرنامج النصي ، تذكر ، هناك وصف أكثر تفصيلاً ). يقوم بتوصيل WiFi ويتحقق من وجود إعدادات للروبوت في Telegram.
- البرنامج النصي الرئيسي للعمل هو face.py
الى جانب. هناك شيئان مفقودان في Git:
- ملف بيانات اعتماد WiFi - wpa_supplicant_auto.conf
- ملف ببيانات اعتماد Telegram-bot - tg_creedential.txt
يمكنك السماح للنظام بإنشائها تلقائيًا عند بدء التشغيل التالي. يمكنك استخدام ما يلي عن طريق ملء الحقول الفارغة:
tg_creedential.txt
token to access the HTTP API — , @BotFather telegram "/newbot"
socks5://… — ,
socks5 — ,
socks5 — ,
socks5://… — ,
socks5 — ,
socks5 — ,
wpa_supplicant_auto.conf
network={
ssid="******"
psk="*******"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
ssid="******"
psk="*******"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
RPi ضبط الصفارات والمزيفة
لسوء الحظ ، لا يمكنك فقط وضع البرامج النصية وتشغيلها على RPi. إليك ما تحتاجه أيضًا للعمل المستقر:
- قم بتثبيت l_openvino_toolkit_runtime_raspbian_p_2020.1.023.tgz وفقًا للتعليمات - docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_raspbian.html
- تثبيت التشغيل التلقائي
- احذف الرسالة المتعلقة بكلمة المرور الافتراضية (قد لا تكون ضرورية ، لكنها أزعجتني) - sudo apt purge libpam-chksshpwd
- قم بإيقاف تشغيل شاشة التوقف - www.raspberrypi.org/forums/viewtopic.php؟t=260355
- للكشف عن الصوت:
- pip3 تثبيت webrtcvad
- sudo apt-get install python-dev
- sudo apt-get install portaudio19-dev
- sudo pip3 تثبيت pyaudio
- قم بتنزيل النماذج من مستودع OpenVino باستخدام البرنامج النصي "Get_models.py" في مجلد "الطرازات"
شكل
الصورة منشورة هنا (5 العربات).
بضع نقاط:
- يتم استخدام كلمة مرور تسجيل الدخول القياسية (pi ، raspberry)
- تم تفعيل وصول SSH
- بشكل افتراضي ، لا يتم توصيل WiFi ولا يتم تكوين عنوان الروبوت في عربة التسوق التي سيستخدمها النظام للمراقبة.
كيفية إعداد WiFi في صورة
الخيار الأول هو إظهار رمز الاستجابة السريعة مع النص بعد التشغيل:
WIFI:T:WPA;P:qwerty123456;S:TestNet;;
حيث بعد P هي كلمة مرور الشبكة ، بعد S هي معرف الشبكة.
- إذا كان لديك هاتف يعمل بنظام Android 10 ، فسيتم إنشاء رمز الاستجابة السريعة هذا تلقائيًا عند النقر فوق "مشاركة الشبكة"
- إذا لم يكن كذلك ، فيمكنك إنشاؤه على www.the-qrcode-generator.com
الخيار الثاني هو SSH في RPi (عن طريق التوصيل عبر السلك). أو قم بتشغيل الشاشة ولوحة المفاتيح. و ضع الملف
wpa_supplicant_auto.conf
network={
ssid="*********"
psk="*******"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
ssid="*********"
psk="*******"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
مع إعدادات wi-fi الخاصة بك إلى مجلد "/ home / pi / face_detect".
كيفية إعداد روبوت برقية في صورة
الخيار الأول هو إظهار رمز الاستجابة السريعة مع النص بعد التشغيل:
tg_creedential.txt
token to access the HTTP API — , @BotFather telegram "/newbot"
socks5://… — ,
socks5 — ,
socks5 — ,
socks5://… — ,
socks5 — ,
socks5 — ,
عن طريق توليدها عبر www.the-qrcode-generator.com
الخيار الثاني هو SSH في RPi (متصل بسلك). أو قم بتشغيل الشاشة ولوحة المفاتيح. ثم ضع ملف tg_creedential.txt الموضح أعلاه في المجلد "/ home / pi / face_detect".
ملاحظة عن الطفولة
عندما جمعت النسخة الأولى وعرضتها على والدتي ، تلقيت إجابة مفاجئة:
"أوه ، لقد فعلنا الشيء نفسه تقريبًا في طفولتك."
"؟!"
"حسنًا ، وضعوا عربة الأطفال معك على الشرفة ، وألقوا بميكروفون من خلال النافذة ، والذي تم تضمينه في مكبر الصوت في الشقة."
بشكل عام ، اتضح فجأة أنه وراثي.
ملاحظة عن الزوج
"كيف كان رد فعل زوجتك؟"
"كيف سمحت لك بتجربة ابنك؟!"
سألوا أكثر من مرة.
لكنني دمرت زوجتي جيدًا. هنا، انها حتى يكتب مقالات عن حبري في بعض الأحيان.
PS1
أنا لست متخصصًا في أمن المعلومات. بالطبع ، حاولت التأكد من عدم ظهور أي كلمات مرور في أي مكان ، وما إلى ذلك ، ويمكن للجميع تكوينها لأنفسهم ، مع الإشارة إلى جميع معلومات الأمان بعد البداية.
لكنني لا أستبعد أنني فاتني شيء في مكان ما. إذا رأيت أخطاء واضحة ، سأحاول إصلاحها.
PS2
على الأرجح ، سأتحدث عن تحديثات هذا المشروع في قناة برقية الخاصة بي ، أو في مجموعة فكونتاكتي . إذا جمعت الكثير من الأشياء المثيرة للاهتمام ، فسأصدر منشورًا آخر هنا.