chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度學(xué)習(xí)計(jì)算卡

分享:
?

米爾FZ3深度學(xué)習(xí)計(jì)算免費(fèi)試用

FZ3 深度學(xué)習(xí)計(jì)算是米爾電子推出的一款以 Xilinx XCZU3EG 作為核心的嵌入式智能 AI 開發(fā)平臺(tái)。采用了 Xilinx 最新的基于 16nm 工藝的 Xilinx Zynq

社區(qū)化 2020-10-09 10:21:45

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】在米爾FZ3深度學(xué)習(xí)計(jì)算上跑自己的系統(tǒng)

` 本帖最后由 liujing1232 于 2020-12-10 15:30 編輯 在米爾FZ3深度學(xué)習(xí)計(jì)算上跑自己的系統(tǒng)米爾FZ3深度學(xué)習(xí)計(jì)算本質(zhì)上是一塊利用Zynq跑自定義的系統(tǒng),并在

liujing1232 2020-11-27 21:21:26

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】FZ3深度學(xué)習(xí)計(jì)算總結(jié)篇

`FZ3深度學(xué)習(xí)計(jì)算總結(jié)篇幾個(gè)月的試用即將結(jié)束,也通過這個(gè)板子完成了自己的項(xiàng)目,具體的不方便公開,有網(wǎng)友私聊我相關(guān)資料,因此這里做一個(gè)統(tǒng)一的說明,能公開的帖子里面都發(fā)布了,其他的項(xiàng)目結(jié)束之后,會(huì)考

liujing1232 2021-01-10 14:39:17

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】深度學(xué)習(xí)體驗(yàn)自定義硬件

balenaEtcher后燒寫成功。如圖1所示:圖1 balenaEtcher燒寫軟件然后就可以體驗(yàn)深度學(xué)習(xí)計(jì)算的魅力了。根據(jù)官方用戶手冊(cè)的指示,開始操作。根據(jù)之前的連接演示,成功以串口進(jìn)行連接,屏幕也已點(diǎn)亮

liujing1232 2020-11-20 15:32:04

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】DPU搭建

DPU驗(yàn)證 將上述文件復(fù)制到SD的boot區(qū),運(yùn)行DPU的IP核得到下述信息即可驗(yàn)證:4 使用總結(jié)米爾FZ3深度學(xué)習(xí)計(jì)算是MPSOC+UltraScale結(jié)合的主核,該板卡能夠所能達(dá)到的Ai系統(tǒng)

liujing1232 2020-12-10 15:23:40

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】UDP讀取攝像頭圖像緩存并動(dòng)態(tài)顯示

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】UDP讀取攝像頭圖像緩存并動(dòng)態(tài)顯示 前文再續(xù)書接上一回,UDP緩存方式傳輸攝像頭圖像這個(gè)Demo是我在上一帖之前就已經(jīng)完成的,無奈傳輸效果實(shí)在不如UDP傳輸文件

donatello1996 2021-01-11 00:35:40

【米爾FZ3深度學(xué)習(xí)計(jì)算試用】開箱初體驗(yàn)

的是該款芯片能夠運(yùn)行一個(gè)B2304低DSP的深度學(xué)習(xí)計(jì)算,能夠滿足大部分的實(shí)時(shí)性要求場(chǎng)合。首先是該板卡的開箱圖片:不得不說:“make your idea real”這個(gè)名字確實(shí)不錯(cuò)的,下面是板卡的破殼

liujing1232 2020-11-14 19:52:30

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】一 開箱

16g這個(gè)板子沒有wifi及藍(lán)牙~~視頻接口不是hdmi接口,是一個(gè)dp接口上面有按鈕和撥動(dòng)開關(guān),功能說明書上有定義,后面會(huì)好好研究下接攝像頭和顯示器的排線接口不是一個(gè)普通的開發(fā)板,fpga,多核心,最大特點(diǎn)是和百度eazydl,aistudio深度融合,進(jìn)行深度學(xué)習(xí)。后面會(huì)仔細(xì)研究應(yīng)用下`

robot_ros 2020-11-13 15:23:41

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】AI系統(tǒng)基礎(chǔ)上擴(kuò)展接口

AI系統(tǒng)基礎(chǔ)上擴(kuò)展接口1 擴(kuò)展的必要性FZ3深度學(xué)習(xí)板卡裝載了AI系統(tǒng),但是其數(shù)據(jù)僅僅只能在該系統(tǒng)內(nèi)部,缺乏與外界交流的媒介,無法將自身寶貴的數(shù)據(jù)傳遞給外界,盡管現(xiàn)有的系統(tǒng)以及百度AI系統(tǒng)自身已經(jīng)

liujing1232 2020-12-29 09:58:07

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】搭建Vitis Ai系統(tǒng)平臺(tái)并測(cè)試

框架和最新的模型,能夠執(zhí)行不同的深度學(xué)習(xí)任務(wù)· 提供一系列全面的預(yù)先優(yōu)化模型,這些模型現(xiàn)已就緒,可隨時(shí)部署在 Xilinx 器件上。您可以找到最相似的模型,開始針對(duì)您的應(yīng)用重新訓(xùn)練!· 提供功能強(qiáng)大

liujing1232 2020-12-03 19:22:13

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】簡(jiǎn)單開箱補(bǔ)充貼

` 本帖最后由 獵國(guó)傾城 于 2020-12-3 18:17 編輯 配件清單配件16GB的SD,內(nèi)含開發(fā)板的鏡像。開發(fā)板正面照開發(fā)板背面照,背面只有一個(gè)SD插槽mipi-csi攝像頭接口

獵國(guó)傾城 2020-11-09 20:15:07

【米爾FZ3深度學(xué)習(xí)計(jì)算免費(fèi)試用】+Coremark跑個(gè)分

本帖最后由 獵國(guó)傾城 于 2021-1-6 21:01 編輯 首先下載CoreMark源碼,然后上傳到開發(fā)版解壓。cd coremarkmakePORT_DIR=linux64注意開發(fā)板的系統(tǒng)是64位的,所以PORT_DIR=linux64,如果是32位系統(tǒng)PORT_DIR=linux編譯生成coremark.exe文件,運(yùn)行make PORT_DIR=linux64,編譯完成,他會(huì)自動(dòng)運(yùn)行,生成run1.log和run2.logrun1.log結(jié)果:run2.log結(jié)果:總結(jié):才3900多,比STM32H745XI 跑分強(qiáng)點(diǎn),是我沒設(shè)置好,還是什么東西限制了它的發(fā)揮。真正跑分在16400,差的好遠(yuǎn),應(yīng)該是我設(shè)置不對(duì),沒有發(fā)揮出開發(fā)板真正性能,另外這個(gè)跑分只能證明SOC上ARM處理器的性能,其他的證明不了。

獵國(guó)傾城 2021-01-06 20:59:27

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】廠家版上例程解讀&移植

分類是以一張圖片為輸入?yún)?shù),附加二進(jìn)制參數(shù)文件(param文件),與庫上模型(model文件)進(jìn)行對(duì)比,此過程調(diào)用了FPGA核上的邏輯計(jì)算單元,米爾廠家對(duì)調(diào)用FPGA邏輯單元的操作封裝成內(nèi)核庫文件(ko

donatello1996 2020-12-22 01:01:03

百度聯(lián)合米爾推出基于FPGA可伸縮計(jì)算架構(gòu)的FZ3深度學(xué)習(xí)計(jì)算

(及Video Decode)的架構(gòu),既具有多核處理能力、也有視頻流硬解碼處理能力,還具有FPGA的可編程的特點(diǎn)。內(nèi)置Linux 4.14.0系統(tǒng)和深度學(xué)習(xí)預(yù)裝環(huán)境,與百度大腦模型定制平臺(tái)(AIStudio、EasyDL、EasyEdge)深度打通,實(shí)現(xiàn)模型的訓(xùn)練、部署、推理等一站式服務(wù)。

2020-03-31 17:02:42

百度/米爾基于百度大腦EdgeBoard加速平臺(tái)推出FZ3深度學(xué)習(xí)計(jì)算

百度大腦是百度 AI 核心技術(shù)引擎,包括視覺、語音、自然語言處理、知識(shí)圖譜、深度學(xué)習(xí)等AI核心技術(shù)和AI開放平臺(tái)。

2020-04-01 09:03:51

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】DPDK相關(guān)源碼編譯&運(yùn)行體驗(yàn)(不成功)

指令查看,比如插入了RTL8111網(wǎng)下打印信息如下:這個(gè)01:00.0就是PCIe地址信息。目前存在的問題是,即使FZ3板子安裝了RTL8111和igb驅(qū)動(dòng),插上兩種PCIe網(wǎng)卡,ifconfig

donatello1996 2021-02-28 23:43:41

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】移植Debian文件系統(tǒng)及framebuffer外設(shè)相關(guān)開發(fā)心得

兩行的話,那么用普通用戶登錄之后,無法通過sudo -s指令切換到root權(quán)限,很麻煩。將廠家的1.5.1petaLinux系統(tǒng)燒錄到SD上并在虛擬機(jī)或者Linux系統(tǒng)下掛載出來:可以看到,當(dāng)燒錄

donatello1996 2021-01-17 23:50:45

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】?jī)?nèi)核源碼編譯&RTL8192EU驅(qū)動(dòng)

編譯完畢之后把16G的SD的大部分空間都占了:然后是給RTL8192EU驅(qū)動(dòng)源碼編譯,需要將源碼路徑做相應(yīng)修改:make cleanmake -j3編譯,要在Makefile文件里面填入正確的內(nèi)核

donatello1996 2020-12-20 17:46:07

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】在自定義的Ai系統(tǒng)上跑深度學(xué)習(xí)推理模型

`上一次試用將DPU成功移植在了FZ3開發(fā)板上,并將DNNDK開發(fā)套件安裝在了自定義的AI系統(tǒng)上,并通過相關(guān)指令驗(yàn)證了已經(jīng)安裝成功,現(xiàn)在根據(jù)xilinx官方提供的模型跑深度學(xué)習(xí)推理模型。本次驗(yàn)證

liujing1232 2020-12-19 11:23:36

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】PCIe網(wǎng)卡驅(qū)動(dòng)編譯&DPDK相關(guān)源碼編譯&運(yùn)行體驗(yàn)VOL2(成功)

應(yīng)該分給FPGA模塊的2G內(nèi)存也全部開放給文件系統(tǒng),劉工說,也就是這個(gè)內(nèi)核有設(shè)置正確的PCIe時(shí)鐘而使得可以啟用板子引出的PCIe接口(如PCIe網(wǎng)卡,PCIe加速,與別的機(jī)器進(jìn)行PCIe通信等)。燒錄

donatello1996 2021-03-22 00:13:27

【米爾FZ3深度學(xué)習(xí)計(jì)算免費(fèi)試用】+疲勞駕駛檢測(cè)系統(tǒng)第二部分眼睛狀態(tài)識(shí)別

的shape_predictor_68_face_landmarks.dat,可以得到68個(gè)特征點(diǎn)位置的坐標(biāo),68個(gè)特征點(diǎn)如下圖所示:第二原理這個(gè)疲勞駕駛監(jiān)測(cè)系統(tǒng)是通過計(jì)算眼睛縱橫比(Eye Aspect Ratio)來估計(jì)疲勞程度的。具體原理如下圖所示:數(shù)學(xué)公式表述如下:`

獵國(guó)傾城 2021-01-10 18:24:30

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】使用正確的內(nèi)核源碼編譯RTL8192EU無線網(wǎng)卡和RTL8118有線網(wǎng)卡驅(qū)動(dòng)

推測(cè)應(yīng)該就是petaLinux的編譯環(huán)境本體了,壓縮包占用空間是700多M,這兩個(gè)壓縮包編譯出來的目標(biāo)文件夾占用空間非常大,板子SD16GB有可能放不下,于是我將這兩個(gè)壓縮包放到一個(gè)32GB的U盤里

donatello1996 2021-01-31 18:26:17

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】開箱&上電&開發(fā)環(huán)境搭建&USBHID驅(qū)動(dòng)初嘗(失敗)

,這個(gè)接口可厲害了,可以接市面上常規(guī)的PCIE轉(zhuǎn)接,比如PCIE轉(zhuǎn)光纖口,PCIE加速,PCIE固態(tài),PCIE開發(fā)板等,但可惜我手上沒有這些設(shè)備,之后有機(jī)會(huì)再試一下咯。板子支持三種啟動(dòng)方式,分別

donatello1996 2020-12-13 12:24:32

【米爾FZ3深度學(xué)習(xí)計(jì)算免費(fèi)試用】+疲勞駕駛檢測(cè)系統(tǒng)第一部分環(huán)境準(zhǔn)備

本次采用python3.5+opencv3.3.0+dlib+numpy實(shí)現(xiàn)其中python3.5+opencv3.3.0+numpy開發(fā)板已經(jīng)集成了,不需要自己裝,主要自己裝的就是dlib這個(gè)人臉識(shí)別庫。首先要說明的是系統(tǒng)里有兩個(gè)版本的python,一個(gè)是2.7的一個(gè)是3.5,默認(rèn)3.5的。我們要改一下默認(rèn)版本,改一下軟鏈接就可以了。第二步升級(jí)一下pip,不能使用 pip install --upgrade pip,要使用easy_install pip來更新pip第三步安裝dlib人臉識(shí)別庫。使用pip install dlib便可以安裝dlib。另外多說幾句:目前這個(gè)開發(fā)板預(yù)裝的庫(*.so)非常有限,很多庫要自己編譯安裝,這就造成python能裝的庫非常有限,這次能裝上dlib實(shí)屬萬幸,比如我還想裝一下scipy庫,就裝不上,因?yàn)闆]有openblas 、atlas、lapack的動(dòng)態(tài)庫,所以無法安裝scipy庫。有些庫是c寫的,可以自己編譯安裝,而lapack是Fortran寫的,無法在開發(fā)板上編譯安裝,比較棘手。

獵國(guó)傾城 2021-01-10 16:36:47

【米爾FZ3深度學(xué)習(xí)計(jì)算免費(fèi)試用】+疲勞駕駛檢測(cè)系統(tǒng)第三部分嘴巴狀態(tài)識(shí)別

` 本帖最后由 獵國(guó)傾城 于 2021-2-5 11:20 編輯 打哈欠也是判斷疲勞程度的指標(biāo)之一,可以通過打哈欠來判斷駕駛員的疲勞程度,判斷嘴巴的狀態(tài)其實(shí)和眼睛的算法是一樣的,原理不在細(xì)講,嘴巴參考點(diǎn)選取如下:效果:************************************分界線*************************************本來想用視頻,但是開發(fā)板上的GStreamer有問題,導(dǎo)致OpenCV無法解碼視頻,所以退而求其次用圖片做了,已經(jīng)編譯安裝了,但解碼還是有問題,可能是Gst的版本問題,我安裝的是1.12.2的,各位可以試試其他版本的。附gst-libav安裝教程:源碼:https://gstreamer.freedesktop.org/src/gst-libav/`

獵國(guó)傾城 2021-01-10 19:20:36

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】雙端口UDP通信實(shí)現(xiàn)圖片文件的收發(fā)&物品檢測(cè)例程的解讀與移植

本帖最后由 donatello1996 于 2021-1-13 17:25 編輯 UDP通信調(diào)通之后用于傳輸各種各樣的數(shù)據(jù)非常方便,不管是直接傳緩存數(shù)組,文件,還是字符都非常簡(jiǎn)便,而UDP還有一個(gè)非常好用的功能那就是多端口實(shí)現(xiàn)同機(jī)器多應(yīng)用通信,每個(gè)端口所通信的信息互不干擾,代碼也非常好處理,這個(gè)就是我寫好的代碼:int UDP_Send_Picture(socklen_t socket_send,struct sockaddr_in addr,char* filename){struct Package{int length;char data[UDP_FRAME_LEN];int fin;}picture;socklen_t addr_len = sizeof(struct sockaddr_in);FILE *fp;fp = fopen(filename, "rb+");printf("fp = %d\n",fp);fseek(fp, 0, SEEK_END);int fend = ftell(fp);fseek(fp, 0, 0);int sendbytes;printf("fend = %d\n",fend);while(fend > 0){memset(picture.data, 0, sizeof(picture.data));fread(picture.data, UDP_FRAME_LEN, 1, fp);if(fend >= UDP_FRAME_LEN){picture.length = UDP_FRAME_LEN;picture.fin = 0;}else{picture.length = fend;picture.fin = 1;}//printf("sendbytes = %d \n",sendbytes);sendbytes = sendto(socket_send, (char *)&picture, sizeof(struct Package), 0, (struct sockaddr*)&addr,addr_len);if(sendbytes == -1){printf("Send Picture Failed!d\n");return -1;}else{fend -= UDP_FRAME_LEN;}}fclose(fp);}int UDP_Recv_Picture(socklen_t socket_recv,struct sockaddr_in addr,char* filename){struct Package{int length;char data[UDP_FRAME_LEN];int fin;}picture;FILE* fp;bool flag = true;picture.fin = 0;socklen_t addr_len = sizeof(struct sockaddr_in);while(!picture.fin){memset(picture.data, 0, sizeof(picture.data));int recvbytes = recvfrom(socket_recv, (char*)&picture, sizeof(struct Package),0, (struct sockaddr *)&addr, &addr_len);printf("recvbytes = %d \n",recvbytes);if(flag){if(!(fp = fopen(filename, "wb+"))){printf("Open image Failed!\n");}flag = false;}if(recvbytes == 0)break;fwrite(picture.data, picture.length, 1, fp);}printf("Socket Server: IP: %s Connected!\n", inet_ntoa(addr.sin_addr));char sendbuffer[256] = "Server Response";int sendbytes = sendto(socket_recv, sendbuffer, sizeof(sendbuffer), 0, (struct sockaddr *)&addr, addr_len);fclose(fp);}int UDP_Send_Found(socklen_t* socket_found,struct sockaddr_in *addr,char* ip,int port){*socket_found = socket(AF_INET, SOCK_DGRAM, 0);if(*socket_found == (~0)){printf("Create Socket Failed! \n");return -1;}addr->sin_family = AF_INET;addr->sin_addr.s_addr = inet_addr(ip);addr->sin_port = htons(port);memset(addr->sin_zero, 0, 8);}int UDP_Recv_Found(socklen_t* socket_found,struct sockaddr_in *addr,int port){ *socket_found = socket(AF_INET, SOCK_DGRAM, 0); if(*socket_found == (~0)) {printf("Create Socket Failed! \n");return -1; } //bzero(*addr, sizeof(addr)); addr->sin_family = AF_INET; addr->sin_addr.s_addr = htonl(INADDR_ANY); addr->sin_port = htons(port); if (bind(*socket_found,(struct sockaddr *)addr, sizeof(sockaddr_in))

donatello1996 2021-01-12 10:35:13

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】+基于百度EasyDL電動(dòng)車識(shí)別系統(tǒng)第一部分

這次圖片有點(diǎn)多,我拿word寫的,不敢在拿論壇直接發(fā)內(nèi)容了,害怕被吞,白干。文章CSDN鏈接:h/t/t/p/s://blog.csdn.net/qq_15242011/article/details/111182648可以直接下載附件:

獵國(guó)傾城 2020-12-14 18:31:03

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】+基于百度EasyDL電動(dòng)車識(shí)別系統(tǒng)第二部分

文章CSDN:https://blog.csdn.net/qq_15242011/article/details/111300494

獵國(guó)傾城 2020-12-21 20:52:25

【米爾FZ3深度學(xué)習(xí)計(jì)算試用體驗(yàn)】UDP&TCP雙模式讀取攝像頭圖像并動(dòng)態(tài)顯示

` 本帖最后由 donatello1996 于 2021-1-11 00:52 編輯 既然是要做圖像分類識(shí)別,那么從攝像頭獲取圖像那也是必須的,電腦端的QT上位機(jī)通過TCP或者UDP兩種協(xié)議從開發(fā)板處獲得連續(xù)幀圖像,這里有三種方式可以實(shí)現(xiàn),第一種就是直接在開發(fā)板上生成每一幀的圖片,QT上位機(jī)直接通過FTP方式讀取圖片,這個(gè)直接用傳統(tǒng)的FTP協(xié)議即可實(shí)現(xiàn),不需要做任何傳輸處理,圖片可編程性最低,因?yàn)閳D片文件是在板子上面的,只能在板子上面做圖片編程,而且QT上位機(jī)讀取圖片也會(huì)出現(xiàn)沖突的情況;第二種方式也是直接在開發(fā)板上生成每一幀的圖片,通過TCP或者UDP協(xié)議將圖片切割傳輸,每一幀傳輸1024個(gè)字節(jié),再在QT上位機(jī)上組合生成圖片,這種方法同樣圖片可編程性很低,不過還是可以可以直接讀取圖片信息的,因?yàn)檫@種方式會(huì)在QT上位機(jī)上生成圖片文件,就可以進(jìn)行對(duì)圖片的編程了;最后一種方式是直接通過TCP或UDP協(xié)議傳輸圖片的點(diǎn)陣數(shù)據(jù)部分,也就是不以文件形式傳輸,相當(dāng)于傳輸一個(gè)二維數(shù)組,這種方式可編程性最高,但是TCP方式會(huì)出現(xiàn)延遲或圖片撕裂現(xiàn)象,最好是用UDP實(shí)現(xiàn),UDP方式傳輸圖片緩存這個(gè)會(huì)在我之后的帖子中寫出來。首先是板子的代碼,這里我的設(shè)計(jì)是板子做TCP客戶端以及UDP發(fā)送端,并封裝好了 TCP_Client_Found()和UDP_Found()函數(shù),這兩個(gè)函數(shù)的作用就是初始化socket接口以及sockfd套接字文件符(socklen_t型),對(duì)于TCP通信,只需要傳出sockfd參數(shù)即可,將socket_found變量以指針方式傳出,因?yàn)椴皇荰CP服務(wù)器端,因此不需要bind() accept()等操作,只需要socket()和connect()操作:int TCP_Client_Found(socklen_t* socket_found,char* ip,int port){ struct sockaddr_in servaddr; if( (*socket_found = socket(AF_INET,SOCK_STREAM,0)) == -1) {printf(" create socket error: %s (errno :%d) ",strerror(errno),errno);return -1;} memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(port); servaddr.sin_addr.s_addr=inet_addr(ip); if(connect(*socket_found , (struct sockaddr*)&servaddr,sizeof(servaddr)) <0) {printf(" connect socket error: %s(errno :%d) ",strerror(errno),errno);return -2; } return 0;}對(duì)于UDP通信的話傳出參數(shù)就多了一個(gè)sockaddr_in地址信息,因?yàn)閁DP通信的靶向信息是存放在addr結(jié)構(gòu)體里面的,同樣是使用指針方式進(jìn)行傳出:int UDP_Found(socklen_t* socket_found,struct sockaddr_in *addr,char* ip,int port){ *socket_found = socket(AF_INET, SOCK_DGRAM, 0); if(*socket_found == (~0)) {printf("Create Socket Failed! ");return -1; } addr->sin_family = AF_INET; addr->sin_addr.s_addr = inet_addr(ip); addr->sin_port = htons(port); memset(addr->sin_zero, 0, 8); }傳輸文件的方式借用了網(wǎng)上代碼,大致就是用FILE指針讀取文件,將文件切片讀取并傳輸,除去最后一片外,所有切片均是相同大小,文件信息存放在Package結(jié)構(gòu)體中:int TCP_Send_Picture(socklen_t socket_send,char* filename){ struct Package {int length;char data[TCP_FRAME_LEN];int fin; }picture; socklen_t addr_len = sizeof(struct sockaddr_in); FILE *fp; fp = fopen(filename, "rb+"); printf("fp = %d ",fp); fseek(fp, 0, SEEK_END); int fend = ftell(fp); fseek(fp, 0, 0); int sendbytes; printf("fend = %d ",fend); while(fend > 0) {memset(picture.data, 0, sizeof(picture.data));fread(picture.data, TCP_FRAME_LEN, 1, fp);if(fend >= TCP_FRAME_LEN){picture.length = TCP_FRAME_LEN;picture.fin = 0;}else{picture.length = fend;picture.fin = 1;}printf("sendbytes = %d ",sendbytes);sendbytes = send(socket_send, (char *)&picture, sizeof(struct Package), 0);if(sendbytes == -1){printf("Send Picture Failed!d ");return -1;}else{fend -= TCP_FRAME_LEN;} }}UDP方式基本相同,比TCP方式少了accept()握手操作:int UDP_Send_Picture(socklen_t socket_send,struct sockaddr_in addr,char* filename){ struct Package {int length;char data[UDP_FRAME_LEN];int fin; }picture; socklen_t addr_len = sizeof(struct sockaddr_in); FILE *fp; fp = fopen(filename, "rb+"); printf("fp = %d ",fp); fseek(fp, 0, SEEK_END); int fend = ftell(fp); fseek(fp, 0, 0); int sendbytes; printf("fend = %d ",fend); while(fend > 0) {memset(picture.data, 0, sizeof(picture.data));fread(picture.data, UDP_FRAME_LEN, 1, fp);if(fend >= UDP_FRAME_LEN){picture.length = UDP_FRAME_LEN;picture.fin = 0;}else{picture.length = fend;picture.fin = 1;}//printf("sendbytes = %d ",sendbytes);sendbytes = sendto(socket_send, (char *)&picture, sizeof(struct Package), 0, (struct sockaddr*)&addr,addr_len);if(sendbytes == -1){printf("Send Picture Failed!d ");return -1;}else{fend -= UDP_FRAME_LEN;} }}操作函數(shù)(分開兩個(gè)main):TCP方式:int main(int argc, char**argv){ int recvbytes; socklen_t socklen_tcp; TCP_Client_Found(&socklen_tcp,IP_ADDRESS,TCP_PORT); V4L2_Init(CAMERA_DEV); while(1) {V4l2_Grab();Yuyv_2_RGB888(buffers,frame_buffer);Encode_Jpeg(frame_buffer,640,480,"1.jpg");TCP_Send_Picture(socklen_tcp,(char*)"/home/workspace1/1.jpg");sleep(1);// char recvbuffer[256];// recvbytes = recv(socklen_tcp , recvbuffer , sizeof(recvbuffer) , 0);// printf("Server: %s ",recvbuffer);// printf("Please input img to send: "); } close(socklen_tcp); return 0;}UDP方式:int main(int argc, char* argv[]){ int recvbytes; struct sockaddr_in sockaddr_udp; socklen_t socklen_udp,addr_len = sizeof(struct sockaddr_in); UDP_Found(&socklen_udp,&sockaddr_udp,IP_ADDRESS,UDP_PORT); V4L2_Init(CAMERA_DEV); while(1) {V4l2_Grab();Yuyv_2_RGB888(buffers,frame_buffer);Encode_Jpeg(frame_buffer,640,480,"1.jpg");UDP_Send_Picture(socklen_udp,sockaddr_udp,(char*)"/home/workspace1/1.jpg");char recvbuffer[256];recvbytes = recvfrom(socklen_udp , recvbuffer , sizeof(recvbuffer) , 0, (struct sockaddr*)&sockaddr_udp , &addr_len);printf("Server: %s ",recvbuffer);printf("Please input img to send: "); } close(socklen_udp);}電腦QT上位機(jī)設(shè)計(jì):這是TCP和UDP兩種不同傳輸方式的實(shí)際效果:可以看出來UDP方式要比TCP更為順暢,但是即使是UDP方式顯示效果依然很差,這里有兩個(gè)原因,第一是攝像頭太低檔,幀生成時(shí)間長(zhǎng),即使是在開發(fā)板本機(jī)輸出也快不到哪里去,第二是網(wǎng)絡(luò)傳輸文件的速率還可以再改進(jìn)。`

donatello1996 2021-01-11 00:28:17

加載更多
相關(guān)標(biāo)簽