網絡視頻監控與人臉識別

明天又要去面試了,趁次機會也將以前做的東西總結一下,為以后理解提供方便,也再加深下印象。

網絡視頻監控與人臉識別主要由三個程序組成:1、視頻采集與傳輸程序;2、接受與顯示程序;3、人臉識別程序。下面就分別來分析一下這三個程序。

一、視頻采集與傳輸程序(Servfox)

關鍵部分解析:

1、視頻數據采集(可采用共享內存方式和讀方式)

[cpp] view plaincopy
  1. int?v4lGrab?(struct?vdIn?*vd?)??
  2. {??
  3. ??static????int?frame?=?0;????????
  4. ??int?len;??
  5. ??int?size;??
  6. ??int?erreur?=?0;??
  7. ??int?jpegsize?=?0;??
  8. ??
  9. ??struct?frame_t?*headerframe;??
  10. ??double?timecourant?=0;??
  11. ??double?temps?=?0;??
  12. ??timecourant?=?ms_time();??
  13. ????
  14. ??if?(vd->grabMethod)??/*<strong>共享內存方式</strong>*/??
  15. ????{??
  16. ??????vd->vmmap.height?=?vd->hdrheight;??
  17. ??????vd->vmmap.width?=?vd->hdrwidth;??
  18. ??????vd->vmmap.format?=?vd->formatIn;??
  19. ????????
  20. ?????/*該函數成功返回則表示一幀采集已完成,采集到的圖像數據放到?
  21. ?????起始地址為?vd->map+vd->mbuf.offsets[vd->frame]?
  22. ?????的內存區中,讀取該內存區中的數據便可得到圖像數據。?
  23. ?????接著可以做下一次的?VIDIOCMCAPTURE。*/??
  24. ??????if?(<strong>ioctl?(vd->fd,?VIDIOCSYNC,?&vd->vmmap.frame</strong>)?<?0)????
  25. ??
  26. ????{??
  27. ??????perror?("cvsync?err\n");??
  28. ??????erreur?=?-1;??
  29. ????}??
  30. ???????
  31. ????/*?Is?there?someone?using?the?frame?*/????
  32. ????while((vd->framelock[vd->frame_cour]?!=?0)?&&?vd->signalquit)??
  33. ????usleep(1000);??
  34. ????pthread_mutex_lock?(&vd->grabmutex);??
  35. ?????????temps?=?ms_time();??
  36. ????/*采集完成,進行jpeg壓縮處理,里面大有文章*/??
  37. ?????jpegsize=?<strong>convertframe</strong>(vd->ptframe[vd->frame_cour]+?sizeof(struct?frame_t),??
  38. ????????????vd->pFramebuffer?+?vd->videombuf.offsets[vd->vmmap.frame],??
  39. ????????????vd->hdrwidth,vd->hdrheight,vd->formatIn,vd->framesizeIn);??
  40. ????/*填充數據幀信息頭*/??
  41. ?????headerframe=(struct?frame_t*)vd->ptframe[vd->frame_cour];??
  42. ?????snprintf(headerframe->header,5,"%s","SPCA");???
  43. ?????headerframe->seqtimes?=?ms_time();??
  44. ?????headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);???
  45. ?????headerframe->w?=?vd->hdrwidth;??
  46. ?????headerframe->h?=?vd->hdrheight;??
  47. ?????headerframe->size?=?((?jpegsize?<?0)?0:jpegsize);??
  48. ?????headerframe->format?=?vd->formatIn;??
  49. ?????headerframe->nbframe?=?frame++;???
  50. ????//?printf("compress?frame?%d?times?%f\n",frame,?headerframe->seqtimes-temps);??
  51. ??????
  52. ????pthread_mutex_unlock?(&vd->grabmutex);???
  53. ????/************************************/??
  54. ??????
  55. ??????if?((<strong>ioctl?(vd->fd,?VIDIOCMCAPTURE,?&(vd->vmmap)</strong>))?<?0)??
  56. ????{??
  57. ??????perror?("cmcapture");??
  58. ??????if(debug)?printf?(">>cmcapture?err?\n");??
  59. ??????erreur?=?-1;??
  60. ????}??
  61. ??????vd->vmmap.frame?=?(vd->vmmap.frame?+?1)?%?vd->videombuf.frames;??
  62. ??????vd->frame_cour?=?(vd->frame_cour?+1)?%?OUTFRMNUMB;??
  63. ??????//if(debug)?printf("frame?nb?%d\n",vd->vmmap.frame);??
  64. ??
  65. ????}??
  66. ??else?????/*?<strong>讀方式</strong>*/??
  67. ?????{??
  68. ??????size?=?vd->framesizeIn;??
  69. ??????len?=?<strong>read</strong>?(vd->fd,?vd->pFramebuffer,?size);??
  70. ??????if?(len?<?0?)??
  71. ????{??
  72. ??????if(debug)?printf?("v4l?read?error\n");??
  73. ??????if(debug)?printf?("len?%d?asked?%d?\n",?len,?size);??
  74. ??????return?0;??
  75. ????}??
  76. ??????
  77. ??????/*?Is?there?someone?using?the?frame?*/??
  78. ???????while((vd->framelock[vd->frame_cour]?!=?0)&&?vd->signalquit)??
  79. ????usleep(1000);??
  80. ????pthread_mutex_lock?(&vd->grabmutex);??
  81. ??????????temps?=?ms_time();??
  82. ?????jpegsize=?convertframe(vd->ptframe[vd->frame_cour]+?sizeof(struct?frame_t),??
  83. ????????????vd->pFramebuffer?,??
  84. ????????????vd->hdrwidth,vd->hdrheight,vd->formatIn,vd->framesizeIn);???
  85. ??????
  86. ?????headerframe=(struct?frame_t*)vd->ptframe[vd->frame_cour];??
  87. ?????snprintf(headerframe->header,5,"%s","SPCA");???
  88. ?????headerframe->seqtimes?=?ms_time();??
  89. ?????headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);???
  90. ?????headerframe->w?=?vd->hdrwidth;??
  91. ?????headerframe->h?=?vd->hdrheight;??
  92. ?????headerframe->size?=?((?jpegsize?<?0)?0:jpegsize);???
  93. ?????headerframe->format?=?vd->formatIn;???
  94. ?????headerframe->nbframe?=?frame++;???
  95. ?????//??if(debug)?printf("compress?frame?%d?times?%f\n",frame,?headerframe->seqtimes-temps);??
  96. ??????
  97. ????vd->frame_cour?=?(vd->frame_cour?+1)?%?OUTFRMNUMB;????
  98. ????pthread_mutex_unlock?(&vd->grabmutex);???
  99. ??????/************************************/??
  100. ???????
  101. ????}??
  102. ??return?erreur;??
  103. }??


2、數據通過socket通信方式發送

[cpp] view plaincopy
  1. for?(;;)??
  2. ????{?????
  3. ??????????memset(&message,0,sizeof(struct?client_t));??
  4. ????/*接受網絡數據,保存在message?結構體中*/??
  5. ?????ret?=?read(sock,(unsigned?char*)&message,sizeof(struct?client_t));???
  6. ???????????/*根據接受到的控制信息進行控制*/??
  7. ???????????/*大小調節*/??
  8. ?????else?if?(message.updosize){?//compatibility?FIX?chg?quality?factor?ATM??
  9. ????????switch?(message.updosize){??
  10. ????????case?1:?qualityUp(&videoIn);??
  11. ????????break;??
  12. ????????case?2:?qualityDown(&videoIn);??
  13. ????????break;??
  14. ????????}??
  15. ????????ack?=?1;??
  16. ????}???
  17. ?????/*幀數調節*/??
  18. ?????else?if?(message.fps){??
  19. ????????switch?(message.fps){??
  20. ????????case?1:?timeDown(&videoIn);??
  21. ????????break;??
  22. ????????case?2:?timeUp(&videoIn);??
  23. ????????break;??
  24. ????????}??
  25. ????????ack?=?1;??
  26. ????}???
  27. ?????/*睡眠控制*/??
  28. ?????else?if?(message.sleepon){??
  29. ????????ack?=?1;??
  30. ?????}???
  31. ?????else?ack?=0;??
  32. ???????while?((frameout?==?videoIn.frame_cour)?&&?videoIn.signalquit)???usleep(1000);??
  33. ???????if?(videoIn.signalquit){??
  34. ????videoIn.framelock[frameout]++;??
  35. ??????????headerframe?=?(struct?frame_t?*)?videoIn.ptframe[frameout];??
  36. ??????headerframe->acknowledge?=?ack;??
  37. ??????headerframe->bright?=?bright;??
  38. ??????headerframe->contrast?=?contrast;??
  39. ??????headerframe->wakeup?=?wakeup;??
  40. ??????/*發送數據幀頭信息*/??
  41. ?????ret?=?write_sock(sock,?(unsigned?char?*)headerframe,?sizeof(struct?frame_t))?;????
  42. ?????if(!wakeup)??????
  43. ?????/*發送數據幀信息*/??
  44. ?????ret?=?write_sock(sock,(unsigned?char*)(videoIn.ptframe[frameout]+sizeof(struct?frame_t)),headerframe->size);???????
  45. ?????videoIn.framelock[frameout]--;??
  46. ?????frameout?=?(frameout+1)%4;???????
  47. ??????}?else?{??
  48. ???????if(debug)?printf("reader?%d?going?out?\n",*id);??
  49. ????break;??
  50. ??????}??
  51. ????}??
  52. ??close_sock(sock);??
  53. ??pthread_exit(NULL);??
  54. }??


二、接受與顯示程序
1、JPEG圖片壓縮原理

實際上,一個平面的圖像,可以理解為除了水平 X 和垂直 Y 以外,還有一個色彩值的 Z 的三維的系統。Z 代表了三元色中各個分支 R/G/B 的混合時所占的具體數值大小,每個像素的 RGB 的混合值可能都有所不同,各個值有大有小,但臨近的兩個點的 R/G/B 三個值會比較接近。兩個相鄰的點,會有很多的色彩是很接近的,那么如何能在最后得到的圖片中,盡量少得記錄這些不需要的數據, 也即達到了壓縮的效果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

esxi.主機配置上聯端口_為什么現代的電腦機箱仍然具有USB 2.0端口?

esxi.主機配置上聯端口With USB 3.0 becoming more prevalent with each passing year now, you may have found yourself wondering why modern computers still have USB 2.0 ports built into them. With that in mind, today’s SuperUser Q&A post has the answers to…

使用命令導入、導出mysql數據

1.導出全部數據庫 利用mysqldump的—all-databases參數可以一口氣把你數據庫root用戶下的所有數據庫一口氣導出到一個sql文件里。然后&#xff0c;重裝系統后使用source命令可以再一口氣倒回來。 需要確定mysql安裝的路徑&#xff1a;本機是&#xff1a;C:\Program Files\MySQL…

面試--跨域--cors

cors是什么 cors 跨域資源共享 Cross-origin resource sharing是一種跨域的解決方案 它允許瀏覽器向跨源服務器&#xff0c;發出XMLHttpRequest請求&#xff0c;從而克服了AJAX只能同源使用的限制。 但是需要瀏覽器的支持。值得注意的是&#xff1a;整個CORS通信過程&#xff0…

【原理圖操作】原理圖更新PCB時未改動元器件布局變動問題?

轉載PCB布局、布線完工之后&#xff0c;由于設計功能&#xff0c;發現不完善時, 原理圖部分功能需要改動&#xff0c;再改原理圖&#xff0c;修改完成后&#xff0c;導入PCB過程中&#xff0c;發現PCB中未改動&#xff08;部分&#xff09;的元器件 布局發生了變化&#xff0c;…

關閉edge任務欄預覽_如何在Microsoft Edge中關閉選項卡預覽

關閉edge任務欄預覽Now that it has extension support, Microsoft Edge is becoming a more and more viable browser. One feature people seem to either love or hate is the pop-up preview you get when you hover over a tab. There’s no built-in setting that lets y…

oracle 創建view時,授權給用戶

解決方法&#xff1a; 以dba用戶登錄 sqlplus / as sysdba 賦予scott用戶創建VIEW的權限 grant create view to scott 以scott用戶登錄oracle conn scott/tiger 創建視圖成功 CREATE OR REPLACE VIEW myview AS 轉載于:https://www.cnblogs.com/523823-wu/p/7635436.html

[BZOJ 1072] 排列perm

Link&#xff1a; BZOJ 1072 傳送門 Solution&#xff1a; 一道直接next_permutation純暴力就能過的題&#xff1f; 難道2007年時大家都不知道next_permutation這個函數嗎 還是用復雜度更優的狀壓DP吧 設$dp[i][j]$為狀態為$i$且對$d$余$j$的個數&#xff0c; 注意$dp[(1<&l…

智能手機丟失 數據安全_丟失智能手機時該怎么辦

智能手機丟失 數據安全Phones get stolen or lost everyday. With a plethora of data ripe for identity-theft on it, a lost phone can easily make your blood run cold. Take a deep breath, How-To Geek will talk you through this. 手機每天都會被盜或丟失。 隨著大量用…

程序員怎樣成為一名架構師?

在今天的技術圈&#xff0c;可能隨便遇到一個人遞給你一張名片&#xff0c;title 就是某某架構師。架構師多如過江之鯽&#xff0c;也正是眼下業內一個有趣的現象。對于架構師&#xff0c;你有什么看法&#xff1f;什么是架構師&#xff1f;隨便打開某招聘網站&#xff1a;系統…

C++設計模式之工廠模式(1)

關于設計模式的作用&#xff1a; “幫助我們將應用組織成容易了解&#xff0c;容易維護&#xff0c;具有彈性的架構&#xff0c;建立可維護的OO系統&#xff0c;要訣在于隨時想到系統以后可能需要的變化以及應付變化的原則。” 具體可參考&#xff1a;https://www.cnblogs.com/…

共享沒有權限訪問權限_如何與家人共享SmartThings訪問權限

共享沒有權限訪問權限If you have multiple people in your household and want them all to have access to SmartThings from their phones, here’s how to share access to SmartThings with anyone you want. 如果您的家庭中有多個人&#xff0c;并且希望他們所有人都可以…

PABX

自動用戶小交換機;&#xff3b;私用自動交換分機&#xff3d; A private telephone exchange that automatically connects internal “branch” lines to the external circuits of a telephone system. 一種自動地將內部用戶線連接到電話系統外線的專用電話交換機。 Private …

使用jquery+css實現瀑布流布局

雖然可以直接使用css實現瀑布流布局&#xff0c;但顯示的方式有點問題&#xff0c;所以這兒就直接使用jquerycss來實現瀑布流布局&#xff0c;最終效果如下&#xff1a; 思路是通過將每個小塊的position設置為relative&#xff0c;然后計算出在當前選擇的列下應該上移的距離&am…

geek_How-To Geek正在尋找安全作家

geekThink you have the perfect combination of geek knowledge and writing skills? We’re looking for an experienced, security-focused writer to join our team. 認為您將怪胎知識和寫作技能完美結合了嗎&#xff1f; 我們正在尋找經驗豐富&#xff0c;注重安全性的作…

AAC 文件解析及解碼流程

OUTLINE&#xff1a; &#xff0a; AAC概述 &#xff0a; AAC規格簡述 &#xff0a; AAC特點 &#xff0a; AAC音頻文件解析 ——ADIF&#xff06;ADTS格式 ——ADIF&#xff06;ADTS頭信息 ——ADIF&#xff06;ADTS數據信息 ——AAC文件處理流程 &#xff0a; AAC解碼流程…

JDK8之Stream新特性

/***JDK8 Stream特性* Created by chengbx on 2018/5/27.* Java 8 中的 Stream 是對集合&#xff08;Collection&#xff09;對象功能的增強&#xff0c;它專注于對集合對象進行各種非常便利、高效的聚合操作&#xff08;aggregate operation&#xff09;&#xff0c;* 或者大…

雞蛋學運維-2:Rsync同步配置步驟

說明&#xff1a;系統環境CentOS release 6.5 (Final) 2.6.32-431.el6.x86_64rsync server:配置步驟1、vi /etc/rsyncd.conf#Rsync server#created by lijianfeng 18:26 2017-9-24#rsyncd.conf start#uid rsyncgid rsyncuse chroot nomax connections 2000timeout 600pid…

IntelliJ IDEA代碼分屏顯示

轉載于:https://www.cnblogs.com/EasonJim/p/9124809.html

vscode重置應用程序_如何在Windows 10上重置應用程序的數據

vscode重置應用程序With Windows 10’s Anniversary Update, you can now reset an app’s data without actually uninstalling and reinstalling the app. This can fix problems when an app has gotten into a bad state, or just quickly restore an app to its default s…

程序報錯與提示

2019獨角獸企業重金招聘Python工程師標準>>> 我們在開發中, 為了程序的規范性,把報錯級別,調的比較高NOTICE級別的也報出來,有助于我們快速定位錯誤和代碼規范&#xff0c;但是,在產品上線后,網站運營過程中,就不宜報這么多錯. 1:這種錯誤給客戶的印象不好 2:在報錯…