日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境

發布時間:2023/12/10 pytorch 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接著上一節人工智能翔云平臺介紹:

人工智能OCR識別: OCR 是英文Optical Character Recognition的縮寫,意思是光學字符識別,也可簡單地稱為文字識別,是文字自動輸入的一種方法。它通過 掃描 和攝像等光學輸入方式獲取紙張上的文字圖像信息,利用各種 模式 識別算法分析文字形態特征 可以將票據、報刊、書籍、文稿及其它印刷品轉化為圖像信息,再利用文字識別技術將圖像信息轉化為可以使用的計算機輸入技術??蓱糜阢y行票據、大量文字資料、檔案卷宗、文案的錄入和處理領域。適合于銀行、稅務等行業大量票據表格的自動掃描識別及長期存儲。相對一般文本,通常以最終識別率、識別速度、版面理解正確率及版面還原滿意度4個方面作為OCR技術的評測依據;而相對于表格及票據, 通常以識別率或整張通過率及識別速度為測定OCR技術的實用標準,隨著人工智能的興起,人們在追求讓工作更簡單化,ocr識別技術可以讓從事文字工作的人更加輕松。

人臉識別接口的購買:

首先注冊翔云平臺的賬號,然后進入價格與購買,購買后即可進行程序代碼的編寫進行接口的調用。通過查看開發文檔,要求http請求是post請求。

編寫代碼實現人臉識別:

編譯openssl支持libcurl的https訪問:

  • 如果不帶編譯時不帶openssl庫那么無法訪問https的網頁,從網頁端什么也獲取不到。
    以下是圖片內容的翻譯:
  • 如上圖所示:之前安裝的libcurl庫不支持https的訪問,所以將原先安裝的libcurl庫刪掉,就把_install這個文件夾刪掉即可,然后重新編譯安裝,編譯的時候記得先安裝openssl庫,就安裝在默認位置/usr/local/lib和/usr/lib下面即可,這樣編譯libcurl庫的時候不用指定ssl庫的路徑了。安裝openssl庫的時候可以從官網下載,也可以使用指令:wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz進行下載,wget 是linux的開源工具,可以從網頁上下載內容。
  • 下載完成后,tar vxf openssl-1.1.1l.tar.gz解壓文件后,文件夾里面的風格和其他庫的內容差不多,首先閱讀README查看這個庫的一些信息,然后得知庫的安裝和編譯要查看INSTALL文件,如下圖所示,可知使用指令:./config、make、sudo make install可以進行默認位置的編譯和安裝。如果想指定位置則使用指令:./config --prefix=/home/fhn/httphandler/openssl/opssl1(主要包含庫文件和頭文件之類的) --openssldir=/home/fhn/httphandler/openssl/opssl2(主要包含一些配置文件,如果不寫這個將會在opssl1下面創建ssl文件夾去放這些配置文件)其中–prefix選項是配置安裝目錄,如果不配置該選項,安裝后可執行文件默認放在/usr /local/bin,庫文件默認放在/usr/local/lib,配置文件默認放在/usr/local/etc,其它的資源文件放在/usr /local/share,比較凌亂。如果配置了–prefix,如: ./config --prefix=/usr/local/test1安裝后的所有資源文件都會被放在/usr/local/test目錄中,不會分散到其他目錄。使用–prefix選項的另一個好處是方便卸載軟件或移植軟件, 當某個安裝的軟件不再需要時,只須簡單的刪除該安裝目錄,就可以把軟件卸載干凈;移植軟件只需拷貝整個目錄到另外一個機器即可(相同的操作系統下)。

  • 將openssl安裝好后,就可以進行支持https的libcurl庫的安裝了,使用指令:./configure --prefix=$pwd/_install --with-ssl、make、sudo make install進行安裝編譯,然后現在的環境就支持了https網頁的訪問。再次使用指令進行編譯即可:gcc demo2.c -o demo2 -I ~/httphandler/curl-7.71.1/_install/include -L ~/httphandler/curl-7.71.1/_install/lib/ -lcurl

base64編碼:

  • Base64是網絡上最常見的用于傳輸8Bit字節碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數據的方法??刹榭碦FC2045~RFC2049,上面有MIME的詳細規范。Base64編碼是從二進制到字符的過程,可用于在HTTP環境下傳遞較長的標識信息。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。Base64由于以上優點被廣泛應用于計算機的各個領域,然而由于輸出內容中包括兩個以上“符號類”字符(+, /, =),不同的應用場景又分別研制了Base64的各種“變種”。為統一和規范化Base64的輸出,Base62x被視為無符號化的改進版本??偨Y:就是一種傳輸格式。
  • 相讓圖片傳到網頁端首先要將它轉化為base64編碼的格式,然后進行上傳,liinux有一個自帶的編碼裝換工具,使用指令:base64 圖片路徑就可以將圖片轉化為base64編碼在http環境下進行傳輸
  • cookie文件: cookie是一種程序,當它放到硬盤后,就成為一個擴展名為TXT的純文本文件。curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
    關于Cookie的一些選項:
    CURLOPT_COOKIE:用來指定一個Cookie,用來在之后的http請求中發送這個Cookie。
    CURLOPT_COOKIEFILE:告訴libcurl激活cookie引擎,然后讀取指定文件來初始化Cookie,只讀。
    CURLOPT_COOKIEJAR:告訴libcurl激活cookie引擎,當easy handle被關閉,保存所有已知的Cookie到cookie jar文件,只寫。
    CURLOPT_COOKIELIST:提供單個的Cookie加入內部的Cookie存儲引擎??梢詡鬟fhttp頭格式也可以傳遞netscape 格式。這個也可以用來刷新Cookies。
    CURLINFO_COOKIELIST:將Cookie信息從內部Cookie存儲里導出,導出格式為鏈表。
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS,postString); // 指定post內容;傳遞給 CURLOPT_POSTFIELDS 的應該是形如name1=var1&name2=var2,在使用 CURLOPT_POSTFIELDS 時,您不需要使用 CURLOPT_POST 。在這種情況下,請求方法將始終設置為POST,c調用libcurl庫POST請求。

然后進行虛擬機上面的代碼編寫:

#include <unistd.h> #include <stdio.h> #include<string.h> #include<stdlib.h> #include <curl/curl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define true 1 #define false 0 int i=0; long long int size; typedef unsigned int bool; size_t readData( void *ptr, size_t size, size_t nmemb, void *stream) //回調函數 {char* buf2;char buf3[100]={'\0'};char buf[1024]={'\0'};strncpy(buf,ptr,1024);buf2=strstr(buf,"CDATA");buf2=buf2+6;strncpy(buf3,buf2,9);if(strstr(buf,"是")!=NULL){printf("是同一個人\n");}else{printf("不是同一個人\n");}printf("置信度為:%s\n",buf3); } char* makeBase64(char* str1,char* str2)//第一個參數是模板文件的地址,第二個參數是傳入文件的地址 {char* sourceimg;char* type1;char* type2;int sourcefd;type1=(char*)malloc(strlen(str1)+50);type2=(char*)malloc(strlen(str2)+50);memset(type1,'\0',strlen(str1)+50);memset(type2,'\0',strlen(str2)+50);sprintf(type1,"base64 %s > %s",str1,str2);sprintf(type2,"rm %s",str2);sourcefd=open(str2,O_RDWR|O_CREAT,0600);system(type1);size=lseek(sourcefd,0,SEEK_END);sourceimg=(char*)malloc(size+2);memset(sourceimg,'\0',size+2);lseek(sourcefd,0,SEEK_SET);//重新讓光標回到文件頭部read(sourcefd,sourceimg,size);close(sourcefd);if(i>=1)system(type2);i=i+1;if(i==10)i=i-9;return sourceimg; } bool postUrl() {CURL *curl;CURLcode res;int typeId=21;char* img1;char* img2;char* format="xml"; //返回格式(xml或者json),如果format為空,則默認返回xml char* postString;char* key="翔云平臺獲取";char* secret="翔云平臺獲取";img1=makeBase64("/home/fhn/httphandler/img/2019270100013390_0_1.jpg","/home/fhn/httphandler/img/source");img2=makeBase64("/home/fhn/httphandler/img/2019289045205325_0_1.jpg","/home/fhn/httphandler/img/compare");int len=strlen(key)+strlen(secret)+sizeof(typeId)+strlen(format)+strlen(img1)+strlen(img2);postString=(char*)malloc(len);memset(postString,'\0',len);sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",img1,img2,key,secret,typeId,format);curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_POSTFIELDS,postString); // 指定post內容curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do"); // 指定翔云平臺的urlcurl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData); //當有數據回來的時候調用回調函數res = curl_easy_perform(curl);curl_easy_cleanup(curl);}free(img1);free(img2);return true; } int main() {postUrl(); }

樹莓派簡單配置CSI攝像頭:

  • 測試環境: 硬件:樹莓派3B/3B+、系統:Raspberry Debian 9 / Debian 10、已安裝好CSI攝像頭的樹莓派。

  • 首先使用"ls"指令來查看是否存在vchiq設備節點(如果沒有,則可能是內核或者設備硬件存在問題,可嘗試重刷系統或更換硬件):

  • 運行"vcgencmd get_camera"查看當前攝像頭是否可用,如果detected=0,說明攝像頭模塊沒接好,重新排查下硬件。detected=1則說明CSI攝像頭接入正常。supported=1說明攝像頭已經使能,攝像頭已經可以使用。supported=1則說明CSI攝像頭沒有使能。需要使能下攝像頭模塊。

  • 運行"sudo raspi-config"命令使能樹莓派CSI攝像頭:


  • 有些程序采用V4L2編程,會訪問到/dev/videoX設備,因此需要添加UVC驅動,針對樹莓派3B/3B+可以采用如下的方法添加bcm2835-v4l2驅動:

pi@raspberrypi:~$ vim.tiny /etc/modules # /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored.i2c-dev bcm2835-v4l2

  • 運行raspistill -o ~/seeFace/image.jpg即可成功拍照并保存,可選擇保存路徑,更多參數使用raspistill --help

  • 移除從原代碼安裝的程序、刪除庫就在源代碼哪里執行sudo make uninstall

然后在樹莓派上面操作和虛擬機相同的操作(先編譯、安裝支持庫,然后編寫代碼):

  • 在樹莓派上面輸入指令:sudo apt install libssl-dev、 sudo apt install libcurl4-openssl-dev 即可快速安裝libcurl和openssl庫,可以不使用在虛擬機那樣方法,但是我沒有嘗試這個方法。
  • 我在樹莓派上使用的是在虛擬機那樣的方法,遇到了很多問題,大概就是找不到庫吧,解決過程中:sudo apt-get update(該命令會訪問源列表里的每個網址,并讀取軟件列表,然后保存在本地電腦。)、sudo apt-get upgrade(該命令,會把本地已安裝的軟件,與剛下載的軟件列表里對應軟件進行對比,如果發現已安裝的軟件版本太低,就會提示你更新。)然而并沒有什么卵用,問題如下:
  • 最終將在樹莓派上裝的openssl庫和libcurl庫使用指令:sudo make uninstall卸載,然后重新安裝openssl庫并且這次安裝的是下圖的版本,就可以編譯并且使用了(但不知道具體原因)。
  • 過程中還遇到樹莓派攝像頭出現下面錯誤:
mmal mmal_vc_component_create failed to create component 'vc ril camera' (1:ENOMEM) mmal mmal_component_create_core could not create component 'vc ril camera' (1) mmal Failed to create camera component mmal main Failed to create camera component mmal Camera is not detected. Please check carefully the camera module is installed correctly
  • 解決: 使用指令:vcgencmd get_camera查看是否能識別設備,出現結果:supported=1 detected=0, 說明只有輸出,并沒有檢測到設備,然后使用指令:sudo raspi-config進入到樹莓派基本設置界面,將Camera Enable、SSH Enable、VNC Enable、SPI Enable、I2C Enable、Serial Enable、1-Wire Enable再次檢測出現下列情況問題就解決:supported=1 detected=1

使用樹莓派播放音頻文件:

  • 登錄樹莓派,打開終端,執行sudo raspi-config命令

  • 選擇第7項Advanced Options高級選項

  • 選擇第4項Audio音頻

  • 可以看到有三種聲音配置,(1)【Auto】-自動選擇;(2)【Force 3.5mm (‘headphone’) jack】-從3.5毫米(“耳機”)插孔輸出;(3)【Force HDMI 】-從HDMI輸出

安裝音樂播放軟件:

  • 要保證樹莓派可以正常連接網絡,我們使用的omxplayer音樂播放軟件需要從網絡下載安裝
  • 輸入指令sudo apt-get install omxplayer,下載安裝omxplayer
  • 進入MP3文件夾,使用omxplayer -o local mp3文件地址播放音樂, -o: Output device must be local',hdmi’, both' oralsa’

樹莓派安裝中文輸入法:

  • 安裝中文字庫:
sudo apt update sudo apt install -y ttf-wqy-zenhei
  • 安裝中文輸入法:
sudo apt install -y scim-pinyin
  • 切換語言環境:sudo raspi-config按方向鍵選擇【localisation options】
  • 選擇【Change Locale】
  • 按方向鍵往下翻,直到找到"zh_CN UTF-8" , 按下空格鍵將其打上*號,回車
  • 選擇語言環境"zh_CN UTF-8"
  • 配置完成,重啟樹莓派:sudo shutdown -r now
  • 另外,如果用vim編輯保存出現“no write since last change",無法保存,可以先退出,然后重新進入編輯,保存時指定編碼方式,如下:w ++enc=utf-8
  • 因為我使用的SecureCRT,所以還要將終端界面配置為中文編碼:

然后進行代碼的編寫(人臉識別成功后,播報語音,控制繼電器):

#include <unistd.h> #include <stdio.h> #include<string.h> #include<stdlib.h> #include <curl/curl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <wiringPi.h> #define true 1 #define JD 25 #define false 0 int i=0; long long int size; typedef unsigned int bool; void gpioInit() {pinMode(JD,OUTPUT);digitalWrite(JD,HIGH); } size_t readData( void *ptr, size_t size, size_t nmemb, void *stream) {char* buf2;float believe;char buf3[100]={'\0'};char buf[1024]={'\0'};strncpy(buf,ptr,1024);printf("%s\n",buf);buf2=strstr(buf,"CDATA");buf2=buf2+6;strncpy(buf3,buf2,3);believe=(float)atof(buf3);if(believe>0.6){system("omxplayer -o local ~/seeFace/img/success.mp3");digitalWrite(JD,LOW);}else{system("omxplayer -o local ~/seeFace/img/fail.mp3");} } char* makeBase64(char* str1,char* str2) {char* sourceimg;char* type1;char* type2;int sourcefd;type1=(char*)malloc(strlen(str1)+50);type2=(char*)malloc(strlen(str2)+50);memset(type1,'\0',strlen(str1)+50);memset(type2,'\0',strlen(str2)+50);sprintf(type1,"base64 %s > %s",str1,str2);sprintf(type2,"rm %s",str2);sourcefd=open(str2,O_RDWR|O_CREAT,0600);system(type1);size=lseek(sourcefd,0,SEEK_END);sourceimg=(char*)malloc(size+20);memset(sourceimg,'\0',size+20);lseek(sourcefd,0,SEEK_SET);read(sourcefd,sourceimg,size+20);close(sourcefd);if(i>=1){system(type2);}i=i+1;if(i==10){i=i-9;}return sourceimg; } bool postUrl() {CURL *curl;CURLcode res;int typeId=21;char* img1=NULL;char* img2=NULL;char* format="xml";char* postString;char* key="平臺獲取";char* secret="平臺獲取";img1=makeBase64("/home/pi/seeFace/img/imagesource.jpg","/home/pi/seeFace/img/source");img2=makeBase64("/home/pi/seeFace/img/image.jpg","/home/pi/seeFace/img/compare");int len=strlen(key)+strlen(secret)+sizeof(typeId)+strlen(format)+strlen(img1)+strlen(img2);postString=(char*)malloc(len);memset(postString,'\0',len);sprintf(postString,"&img1=%s&img2=%s&key=%s&secret=%s&typeId=%d&format=%s",img1,img2,key,secret,typeId,format);curl = curl_easy_init();if (curl){curl_easy_setopt(curl, CURLOPT_POSTFIELDS,postString);curl_easy_setopt(curl, CURLOPT_URL, "https://netocr.com/api/faceliu.do");curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, readData);res = curl_easy_perform(curl);curl_easy_cleanup(curl);}free(img1);free(img2);return true; } int main() {int i=wiringPiSetup();if(i==-1){printf("GPIO Init fail\n");}gpioInit();system("raspistill -t 1000 -o ~/seeFace/img/image.jpg");system("convert -resize 1024x768 ~/seeFace/img/image.jpg ~/seeFace/img/image.jpg");postUrl(); }
  • 使用指令:gcc face.c -o face -I /home/pi/libcurl/curl-7.71.1/_install/include -L /home/pi/libcurl/curl-7.71.1/_install/lib/ -lcurl -lwiringPi編譯后出現問題:
  • 官網查閱錯誤代碼含義:
  • 然后嘗試縮小圖片分辨率,再次進行嘗試,然后即可正常訪問。
  • 使用工具convert進行圖片分辨率的改變
  • 使用指令:sudo apt install imagemagick進行安裝convert的工具包imagemagick
  • 然后使用指令:convert -resize 1024×768 被改圖片地址 改后的圖片地址1024×768中間的是小寫的x。

總結

以上是生活随笔為你收集整理的opensll、libcurl库安装的使用,树莓派CSI摄像头的配置,树莓派调用智能API平台实现人脸识别、树莓派配置中文环境的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。