主頁 > 軟體設計 > 基于樹莓派的智能魔鏡,支持人臉識別、情感監測、熱詞喚醒、語音互動,以及與手機APP互動的實作

基于樹莓派的智能魔鏡,支持人臉識別、情感監測、熱詞喚醒、語音互動,以及與手機APP互動的實作

2021-10-09 08:15:38 軟體設計

目錄

效果演示

第三方庫的安裝

換源

魔鏡界面繪制

服務器部署

人臉識別

流程圖

原始碼地址


效果演示

<iframe id="rOvxJFjd-1633703206423" src="https://v.qq.com/txp/iframe/player.html?vid=z3300zg4odr" allowfullscreen="true" data-mediaembed="tencent"></iframe>

天氣新聞日期熱點等更新【錄屏】

第三方庫的安裝

import paho.mqtt.client as pahomqtt
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication
from PyQt5 import QtGui, QtCore, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from bs4 import BeautifulSoup
import Adafruit_DHT
from aip import AipSpeech
from aip import AipFace
from playsound import playsound
import pyaudio
import requests
import cv2
import snowboydecoder

from mirrorUI import Ui_MainWindow
from face import FaceFunction
from speech import SpeechFunction

import sys, os
import time
import string
import random
import hashlib
import base64
import signal
import RPi.GPIO as GPIO
import json
import wave
import urllib
import urllib3
import re
import threading

換源

sudo nano /etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib

sudo vim /etc/apt/sources.list.d/raspi.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

sudo apt-get update
sudo apt-get upgrade

sudo mkdir ~/.pip
sudo vim ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com

安裝mqtt

pip3 -V
pip3 install paho-mqtt

安裝Qt5

sudo apt-get install python3-pyqt5 -y

git clone提速

git config --global http.postBuffer 524288000

安裝Adafruit_DHT

sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python3 setup.py install

opencv安裝

sudo apt-get install libhdf5-dev libhdf5-serial-dev -y
sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 -y
sudo apt-get install libatlas-base-dev -y
sudo apt-get install libjasper-dev -y

pip3 install opencv_python

安裝字體

復制到/usr/share/fonts/

安裝portaudio

下載portaudio庫http://portaudio.com/download.html
sudo apt install libasound-dev # 一定要有這一句
sudo ./configure
sudo make
sudo make install
vim ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
sudo ldconfig

安裝snowboy

sudo apt-get install pulseaudio -y
sudo apt-get install sox -y
sox -d -d # 測驗
sudo apt-get install python3-pyaudio -y
sudo apt-get install swig -y
sudo apt-get install libatlas-base-dev -y
git clone https://github.com/Kitt-AI/snowboy.git
cd snowboy/swig/Python3 && make

// snowboydecoder將第 5 行代碼 from * import snowboydetect 改為 import snowboydetect 即可直接運行
// 具體用法可參考鏈接:https://www.jianshu.com/p/a1c06020f5fd

安裝Gst(playsound用到)


sudo apt-get install gir1.2-gst-plugins-base-1.0 -y

安裝nginx


1、安裝nginx web服務器

sudo apt-get install nginx -y


2、啟動nginx

sudo /etc/init.d/nginx start


nginx的www根目錄默認在 /usr/share/nginx/html中


3、修改nginx的組態檔

sudo vim /etc/nginx/sites-available/default

listen 8080;## listen for ipv4; this line is default and implied
//監聽的埠號,如果與其它軟體沖突,可以在這里更改
root /usr/share/nginx/www;
//nginx 默認路徑html所在路徑
index index.html index.htm index.php;
//nginx默認尋找的網頁型別,可以增加一個index.php

其他庫


pip3 install bs4 requests playsound baidu-aip pyaudio lxml

魔鏡界面繪制

1、安裝Qt

? [http://download.qt.io/archive/qt/5.9/5.9.3/](http://download.qt.io/archive/qt/5.9/5.9.3/)

下載exe:[qt-opensource-windows-x86-5.9.3.exe](http://download.qt.io/archive/qt/5.9/5.9.3/qt-opensource-windows-x86-5.9.3.exe)

2、使用下載工具IDM,100M寬帶下載速度能達到12M/s

[https://www.lanzous.com/i5sglrc](https://www.lanzous.com/i5sglrc)

3、下載程序中,先去注冊一個Qt賬號

[https://login.qt.io/register](https://login.qt.io/register)

4、.ui轉.py


pyuic5 -o mirrorUI.py mirrorUI.ui

5、mirrorUI.py添加啟動陳述句


import sys
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv) # 定義Qt應用
MainWindow = QtWidgets.QMainWindow() # 視窗實體
ui = Ui_MainWindow() # 界面UI實體
ui.setupUi(MainWindow) # 繪制界面
MainWindow.show() # 顯示視窗
sys.exit(app.exec_()) # 應用關閉

6、界面label對應表

label_temperature 溫度
label_humidity 濕度
label_weather 天氣
label_weathertips 天氣助手
label_weathericon 天氣圖示
label_time 時間
label_date 日期
label_week 星期
label_historyhead 歷史上的今天
label_historymsg 歷史上的今天 的內容
label_communicate 文字互動區
label_todohead 今日事項
label_todomsg 今日事項 的內容
label_headlineshead 今天頭條
label_headlinesmsg 今日頭條 的內容
label_gif 洛天依gif圖

7、信號與槽函式


# 繼承QObject
class MQTT(QObject):
# 創建信號量,傳字串
mqttSignal = pyqtSignal(object)
# 連接信號與槽函式
mqtt.mqttSignal.connect(ui.updateCommunicate)
# 發送信號量
self.mqttSignal.emit("qwe")

8、github原始碼鏈接:

[https://github.com/1061700625/RaspberryPi-MagicMirror](https://github.com/1061700625/RaspberryPi-MagicMirror)

9、mirrorUI.ui路徑:

[mirrorUI.ui](https://github.com/1061700625/RaspberryPi-MagicMirror/blob/master/PythonProject/mirrorUI.ui)

服務器部署

web環境

搭建Linux+Apache+MySQL+PHP環境,

第1步:安裝Apache

Apache是一個免費開源軟體,可運行世界上50%的Web服務器,


sudo apt-get update
sudo apt-get upgrade
sudo apt-get install apache2
sudo /etc/init.d/apache2 restart

要檢查是否安裝了Apache,請將瀏覽器指向您服務器的IP地址(例如http://127.0.0.1),

可以運行以下[命令](https://www.linuxcool.com/)來顯示你的服務器的IP地址:


ifconfig | grep inet | awk '{ print $2 }'

第2步:安裝MySQL(Ubuntu)

MySQL是一個強大的資料庫管理系統,用于組織和檢索資料,


sudo apt-get install mysql-server mysql-client

查看埠:


sudo netstat -tap | grep mysql

用命令激活它:


sudo mysql_install_db

通過運行MySQL設定腳本完成:


sudo /usr/bin/mysql_secure_installation


Would you like to setup VALIDATE PASSWORD plugin? => y
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 => 0
New password: => xxxxxxxx
Re-enter new password: => xxxxxxxx
Remove anonymous users?: => y
Disallow root login remotely?: => y
Remove test database and access to it?: => y
Reload privilege tables now?: => y

第2步:安裝MySQL(Raspbian)


sudo apt-get install mariadb-server mariadb-client

用命令激活它:


sudo mysql_install_db

啟動服務


/usr/bin/mysqld_safe --datadir='/var/lib/mysql'
sudo service mysql start

通過運行MySQL設定腳本完成:


sudo /usr/bin/mysql_secure_installation


Enter current password for root (enter for none):
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

第3步:安裝PHP

PHP是一種開源的Web腳本語言,廣泛用于構建動態網頁,


sudo apt install php7.2-mysql php7.2-curl php7.2-json php7.2-cgi php7.2 libapache2-mod-php7.2

測驗PHP:


查看版本:
php --version

輸出phpinfo:


sudo vim /var/www/html/phpinfo.php


寫入如下內容:


<?php echo phpinfo();?>


瀏覽器輸入:


http://127.0.0.1/phpinfo.php

第4步:重新啟動apache以使所有更改生效


sudo service apache2 restart

第5步:安裝phpmyadmin


sudo apt install php-mbstring php7.2-mbstring php-gettext -y
sudo systemctl restart apache2.service
sudo apt install phpmyadmin -y

安裝程序中的選項:

- 選擇 **Apache2** 并點擊確定
- 選擇 **Yes**來配置 phpMyAdmin 管理的資料庫
- 輸入剛設定的資料庫**密碼**
- 若報錯,可以選擇**ignore**

安裝完成后需要將**phpmyadmin**的檔案夾復制到**www/html**檔案夾下進行管理


sudo cp -Rf /usr/share/phpmyadmin /var/www/html/

打開瀏覽器并輸入http://127.0.0.1/phpmyadmin

輸入用戶名、密碼后登陸

網站部署

放置頁面

將**pictureViewer**檔案夾整個放到/var/www/html/路徑下:
復制:sudo cp -r pictureViewer /var/www/html

移動:sudo mv pictureViewer /var/www/html

修改權限:


sudo chmod 777 /var/www/html/pictureViewer/*

將檔案夾名**pictureViewer**修改為**MagicMirror**:


sudo mv /var/www/html/pictureViewer /var/www/html/MagicMirror

瀏覽器輸入http://127.0.0.1/MagicMirror即可

測驗是否能上傳圖片成功

打開并修改檔案夾下的testUpload.py:


vim /var/www/html/MagicMirror/testUpload.py


url = 'http://127.0.0.1/MagicMirror/upload_file.php'

運行Python:


cd /var/www/html/MagicMirror/
python3 testUpload.py

若提示缺少庫,則先安裝:


pip3 install requests

上傳成功后,重繪瀏覽器界面,會多一張圖片,

MQTT環境

Eclipse Mosquitto是一個開源訊息代理,實作了MQTT協議版本3.1和3.1.1,

Mosquitto安裝

添加存盤庫(Raspbian可跳過):


sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa

更新軟體包:


sudo apt-get update

安裝:


sudo apt-get install mosquitto -y

安裝命令列客戶端:


sudo apt-get install mosquitto-clients -y

默認情況下,Ubuntu將在安裝后啟動Mosquitto服務,

在新終端中,使用`mosquitto_sub`訂閱測驗主題:


mosquitto_sub -h localhost -t test

新開一個其他終端并發布訊息:


mosquitto_pub -h localhost -t test -m "hello world"

啟動服務端


#-c:指定特定組態檔啟動
#-d:后臺運行
mosquitto -c /etc/mosquitto/mosquitto.conf -d

例外情況

如果遇到**Unable to acquire the dpkg frontend lock**這個問題

首先檢查是否在運行apt,apt-get相關的行程:


ps aux | grep -i apt

如果存在與apt相關的正在運行的行程,kill掉行程:


sudo kill -9 <process id>

繼續上一次的配置:


sudo dpkg --configure -a

或者直接簡單粗暴的:


sudo killall apt apt-get

之后可以新的apt操作

人臉識別

流程圖


初始化 --> 開啟子執行緒 --> OpenCV人臉識別 --> 情感檢測 --> 照片上傳服務器 --> OpenCV人臉識別

情感檢測API

百度AI平臺:https://console.bce.baidu.com/

流程圖

安卓app

魔鏡

系統連接圖

原始碼地址

點我下載icon-default.png?t=L892https://download.csdn.net/download/weixin_41937552/29782241

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/306403.html

標籤:其他

上一篇:nginx那點事兒——nginx代理快取服務

下一篇:?openGauss資料庫原始碼決議系列文章—— 安全管理原始碼決議?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more