乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      《樹莓派開發(fā)筆記

       beginnow1 2019-07-10

      6.1樹莓派基本操作

      目前提供了三個應用程序,分別為:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv 非常相似,并且都是用于捕捉圖像,而 raspivid 用于捕捉視頻。

      所有應用程序均基于命令行方式運行,通過 OpenMAX 的 mmal API 進行編寫。OpenMAX 的 mmal API 提供了更易使用的系統(tǒng)組件。注意,mmal 是一個由 Broadcom 為 Videocore 4 系統(tǒng)定制的 API。

      應用程序使用了四個 OpenMAX(mmal)組件:camera(攝像)、preview(預覽)、encoder(編碼)、null_sink。所有應用程序均使用了攝像組件,raspistill 使用了圖像編碼組件,raspivid 使用了視頻編碼組件,raspistillyuv 沒有使用編碼組件,而是直接將 YUV 或 RGB 從攝像組件輸出到文件。

      預覽顯示為可選參數(shù),但是可以用于全屏或輸出到指定的顯示器顯示區(qū)域進行顯示。如果預覽被禁用,那么 null_silk 組件將會對預覽幀進行“吸收”。這是由于盡管不需要攝像頭生成供顯示所用的的預覽幀,但是仍需要使用它們進行曝光計算和白平衡設置的緣故。

      此外,還可以省略文件名參數(shù),這樣既可以直接預覽顯示而不寫入文件,或者直接輸出到標準輸出設備上。命令行幫助可以通過直接輸入應用程序名稱獲得。

      6.1.1安裝攝像頭硬件

      警告:攝像頭對靜電非常敏感。如果您在安裝攝像頭電路板時沒有防靜電手環(huán),可以嘗試觸摸一下水龍頭、金屬水槽或其它類似的東西即可。

      攝像頭電路板與 Raspberry Pi 通過一條 15 芯的排線進行連接。僅有兩個連接座需要連接,排線需要安裝到攝像頭電路板和 Raspberry Pi 上。您需要正確安裝,否則攝像頭無法工作。對于攝像頭電路板,排線末端的藍色標記應該背對著電路板。而 Raspberry Pi 部分,藍色標記應該正對著網(wǎng)絡接口方向。

      盡管兩部分連接座不盡相同,但它們的工作方式很相似。對于 Raspberry Pi,拉起連接座兩端的卡扣。它應該很容易拉起,并能夠輕微活動。把排線完全插入到連接座中,并保證豎直,然后輕輕按下兩端的卡扣。攝像頭電路板方面,也需要您將卡扣向電路板相反方向拉開,然后輕輕插入排線,最后將卡扣推回。攝像頭電路板的連接座與 Pi 上的區(qū)別就在這里。

      6.1.2安裝攝像頭軟件

      執(zhí)行下文介紹的命令行進行下載并安裝最新的內(nèi)核,GPU 固件及應用程序。您需要連接到互聯(lián)網(wǎng)才可以實現(xiàn)以下操作。

      $sudo apt-get update
      $sudo apt-get upgrade
      

      接下來,您首先需要在 Raspberry Pi 的 raspi-config 程序中啟用攝像頭的支持。
      1)連接攝像頭與樹莓派
      2)修改樹莓派配置,開啟攝像頭模塊。

      sudo raspi-config
      

      這里寫圖片描述

      圖1

      將光標移動到攝像頭選項(Camera option)處,并選擇啟用(Enable)。在退出 raspi-config 時會要求您重新啟動。啟用選項是為了確保重啟后 GPU 固件能夠正確運行(包括攝像頭驅動和調節(jié)電路),并且 GPU 從主內(nèi)存劃分到了足夠的內(nèi)存使攝像頭能夠正確運行。

      這里寫圖片描述

      圖2

      測試系統(tǒng)已經(jīng)完成安裝并正常工作,可嘗試以下命令:

      $raspistill -v -o test.jpg
      

      這將顯示來自攝像頭 5 秒鐘的預覽圖像,并且拍攝一張照片,然后保存為文件 test.jpg,同時顯示出需要相關信息。

      6.1.3通用命令行參數(shù)

      ? 預覽窗口
      –preview, -p 預覽窗口設置 <‘x,y,w,h’>
      允許用戶在屏幕上定義預覽窗口的大小和位置。注意,這將在所有其它窗口/圖像的上層顯示。
      –fullscreen, -f 全屏預覽模式
      強制預覽屏幕全屏顯示。注意,這將會保留輸入圖像的長寬比例,所以可能會在圖像的邊緣出現(xiàn)填充條。
      –nopreview, -n 不顯示預覽窗口
      完全禁用預覽窗口。注意,盡管預覽窗口被禁用,但攝像頭仍然在進行處理,所以會繼續(xù)消耗資源。
      –opacity, -op 設置預覽窗口透明度
      設置預覽窗口的透明度。0 為完全透明,255 為完全不透明。

      ? 攝像頭控制參數(shù)
      –sharpness, -sh 設置圖像銳度(-100 – 100)
      設置圖像的銳度,默認為 0。
      –contrast, -co 設置圖像對比度(-100 – 100)
      設置圖像的對比度,默認為 0。
      –brightness, -br 設置圖像亮度(0 – 100)
      設置圖像的亮度,默認為 50。0 為最暗,100 為最亮。
      –saturation, -sa 設置圖像飽和度(-100 – 100)
      設置圖像色彩飽和度。默認為 0。
      –ISO, -ISO 設置捕捉 ISO
      為捕捉圖像設置 ISO。范圍為 100 到 800。
      –vstab, -vs 打開視頻穩(wěn)定
      僅用于視頻模式,用于開啟視頻穩(wěn)定。
      –ev, -ev 設置曝光補償
      設置圖像的曝光補償。范圍為 -10 到 10,默認為 0。
      –exposure, -ex 設置曝光模式
      可能用到的參數(shù)為:
      auto – 使用自動曝光模式
      night – 夜間拍攝模式
      nightpreview -夜間預覽拍攝模式(暫且這么稱呼)
      backlight – 逆光拍攝模式
      spotlight – 聚光燈拍攝模式
      sports – 運動拍攝模式(高速快門等)
      snow – 雪景優(yōu)化拍攝模式
      beach – 海灘優(yōu)化拍攝模式
      verylong – 長時間曝光拍攝模式
      fixedfps – 幀約束拍攝模式
      antishake – 防抖模式
      fireworks – 煙火優(yōu)化拍攝模式
      注意,不是所有的設置都會在對攝像頭進行微調時得到相應作用。
      –awb, -awb 設置自動白平衡
      可能用到的參數(shù)為:
      off – 關閉白平衡測算
      auto – 自動模式(默認)
      sun – 日光模式
      cloud – 多云模式
      shade – 陰影模式
      tungsten – 鎢燈模式
      fluorescent – 熒光燈模式
      incandescent – 白熾燈模式
      flash – 閃光模式
      horizon – 地平線模式
      –imxfx, -ifx 設置圖像特效
      設置應用于圖像上的特效
      可能用到的參數(shù)為:
      none – 無特效(默認)
      negative – 反色圖像
      solarise – 曝光過度圖像
      posterize – 色調圖像
      whiteboard – 白板特效
      blackboard – 黑板特效
      sketch – 素描風格特效
      denoise – 降噪圖像
      emboss – 浮雕圖像
      oilpaint – 油畫風格特效
      hatch – 草圖特效
      gpen – 馬克筆特效
      pastel – 柔化風格特效
      watercolour – 水彩風格特效
      film – 膠片顆粒風格特效
      blur – 模糊圖像
      saturation – 色彩飽和圖像
      colourswap – 暫未可用
      washedout – 暫未可用
      posterise – 暫未可用
      colourpoint – 暫未可用
      colourbalance – 暫未可用
      cartoon – 暫未可用
      –colfx, -cfx 設置色彩特效
      指定圖像 U 和 V 通道的參數(shù)(范圍 0 到 255)。例如:–colfx 128:128 將得到一張單色圖像。
      –metering, -mm 設置測光模式
      為預覽和捕捉指定測光模式
      可能用到的參數(shù)為:
      average – 全畫面平衡測光
      spot – 點測光
      backlit – 模擬背光圖像
      matrix – 陣列測光
      –rotation, -rot 設置圖像旋轉(0 – 359)
      對取景器和最終得到的圖像進行旋轉??梢越邮?0 以上任何值,但由于硬件限制,只支持 0、90、180、270 度。
      –hflip, -hf 設置水平翻轉
      水平翻轉預覽和保存的圖像。
      –vflip, -vf 設置垂直翻轉
      垂直翻轉預覽和保存的圖像。
      –roi, -roi 設置傳感器感光區(qū)域
      允許指定用于預覽和捕捉的源所使用的傳感器區(qū)域。該功能中 x 和 y 參數(shù)指定了坐上角的坐標,以及定義了寬度和高度值,并且所有值都為標準化坐標(0.0 到 1.0)。那么,感光區(qū)域設置為橫向和縱向都為一半,并且寬度和高度都為傳感器的四分之一時,可以寫為:
      -roi 0.5,0.5,0.25,0.25
      –shutter, -ss 設置快門速度
      設置快門的速度為指定的值(單位為微秒)。據(jù)當前的考證,目前未定義時,快門速度上限大約為 330000us(330ms 或 0.33s)。

      6.1.4應用程序專有設置

      ? raspistill
      –width, -w 設置圖像寬度
      –height, -h 設置圖像高度
      –quality, -q 設置 JPEG 品質,品質為 100 時幾乎等同于未壓縮。75 相對是比較好的選擇。
      –raw, -r 向 JPEG 元數(shù)據(jù)中添加 RAW 信息,該參數(shù)將從攝像頭獲取到的 RAW 信息插入到 JPEG 元數(shù)據(jù)中。
      –output, -o 輸出文件名,指定輸出的文件名。如果不指定,將不保存到文件。如果文件名為“-”,將輸出發(fā)送至標準輸出設備。
      –latest, -l 鏈接最后一幀到文件名,基于該名稱做一個指向最后一幀的文件系統(tǒng)鏈接。
      –verbose, -v 在運行過程中輸出詳細信息,在程序運行過程中,輸出調試/詳細信息。
      –timeout, -t 獲取圖片前的時間,程序將執(zhí)行指定的時長,然后進行獲取操作(前提是 output 已指定)。如果未指定,將設置為 5 秒。
      –timelapse, -tl 間隔拍攝模式,指定多次拍攝之間所間隔的毫秒值。注意,您需要在文件名中加入 %04d 做為畫面計數(shù)。
      -t 30000 -tl 2000 -o image%04d.jpg,將會在 30 秒的時間內(nèi),每兩秒拍攝一次,并且將文件命名為:image1.jpg、image0002.jpg…image0015.jpg。注意 %04d 表示在文件名中數(shù)字部分加入前導零,使其成為 4 位數(shù)。例如,%08d 將生成 8 位數(shù)字。如果間隔時間設置為 0,程序將不間斷(取決于系統(tǒng)負擔及存儲速度)進行拍攝。不過需要注意,每次捕捉前還是會有 30ms 的最小暫停時間,用于曝光計算操作。
      –thumb, -th 設置縮略圖參數(shù)(x:y:quality),允許指定插入到 JPEG 文件中縮略圖信息。如果不指定,將為默認的 64×48 質量為 35 的縮略圖。如果設置為 –thumb none,那么將不會向文件中插入縮略圖信息。文件的尺寸也會稍微變小。
      –demo, -d 運行演示模式,該參數(shù)將循環(huán)使用所有攝像頭參數(shù),并且不會捕捉。而且無論是否完成所有的循環(huán),在超時周期到達時都會停止演示操作。循環(huán)之前的時間需要設置毫秒值。
      –encoding, -e 指定輸出文件的編碼,可用的參數(shù)為 jpg、bmp、gif、png。注意,未被硬件加速支持的圖像格式(gif、png、bmp)在保存的時候要比 jpg 格式耗時更長。還需要注意,文件擴展名在編碼時將被完全忽略。
      –exif, -x 在捕捉的內(nèi)容中加入 EXIF 標簽(格式為 ‘key=value’),允許在 JPEG 圖像中插入特定的 EXIF 標簽。您可以插入 32 條記錄。這是非常實用的功能,比如插入 GPS 元數(shù)據(jù)。例如設置經(jīng)度。
      –exif GPS.GPSLongitude=5/1,10/1,15/100,該命令將會設置經(jīng)度為 5 度 10 分 15 秒。查看 EXIF 文檔獲得所有可用標簽的詳細信息。支持的標簽如下:
      IFD0. 或 IFD1.
      < ImageWidth, ImageLength, BitsPerSample, Compression, PhotometricInterpretation, ImageDescription, Make, Model, StripOffsets, Orientation, SamplesPerPixel, RowsPerString, StripByteCounts, Xresolution, Yresolution, PlanarConfiguration, ResolutionUnit, TransferFunction, Software, DateTime, Artist, WhitePoint, PrimaryChromaticities, JPEGInterchangeFormat, JPEGInterchangeFormatLength, YcbCrCoefficients, YcbCrSubSampling, YcbCrPositioning, ReferenceBlackWhite, Copyright>
      EXIF.
      <ExposureTime, FNumber, ExposureProgram, SpectralSensitivity, a ISOSpeedRatings, OECF, ExifVersion, DateTimeOriginal, DateTimeDigitized, ComponentsConfiguration, CompressedBitsPerPixel, ShutterSpeedValue, ApertureValue, BrightnessValue, ExposureBiasValue, MaxApertureValue, SubjectDistance, MeteringMode, LightSource, Flash, FocalLength, SubjectArea, MakerNote, UserComment, SubSecTime, SubSecTimeOriginal, SubSecTimeDigitized, FlashpixVersion, ColorSpace, PixelXDimension, PixelYDimension, RelatedSoundFile, FlashEnergy, SpacialFrequencyResponse, FocalPlaneXResolution, FocalPlaneYResolution, FocalPlaneResolutionUnit, SubjectLocation, ExposureIndex, SensingMethod, FileSource, SceneType, CFAPattern, CustomRendered, ExposureMode, WhiteBalance, DigitalZoomRatio, FocalLengthIn35mmFilm, SceneCaptureType, GainControl, Contrast, Saturation, Sharpness, DeviceSettingDescription, SubjectDistanceRange, ImageUniqueID>
      GPS.
      <GPSVersionID, GPSLatitudeRef, GPSLatitude, GPSLongitudeRef, GPSLongitude, GPSAltitudeRef, GPSAltitude, GPSTimeStamp, GPSSatellites, GPSStatus, GPSMeasureMode, GPSDOP, GPSSpeedRef, GPSSpeed, GPSTrackRef, GPSTrack, GPSImgDirectionRef, GPSImgDirection, GPSMapDatum, GPSDestLatitudeRef, GPSDestLatitude, GPSDestLongitudeRef, GPSDestLongitude, GPSDestBearingRef, GPSDestBearing, GPSDestDistanceRef, GPSDestDistance, GPSProcessingMethod, GPSAreaInformation, GPSDateStamp, GPSDifferential>
      EINT.
      <InteroperabilityIndex, InteroperabilityVersion, RelatedImageFileFormat, RelatedImageWidth, RelatedImageLength>
      【注意】有部分標簽將會由攝像頭系統(tǒng)自動設置,但是會被命令行執(zhí)行的 EXIF 操作所覆蓋。如果設置為 –exif none,那么將不會向文件中插入 EXIF信息。文件的尺寸也會稍微變小。
      –fullpreview, -fp 全預覽模式,這將使預覽窗口運行于全分辨率捕捉模式。該模式最大幀率為 15fps,并且預覽將和捕捉擁有相同的可視區(qū)域。在不進行模式轉換時,捕捉動作將進行的更迅速。該功能目前還在開發(fā)中。
      –keypress, -k 按鍵模式,攝像頭會運行(-t)參數(shù)指定的時間,并且每次按下回車鍵時進行一次捕捉。在超時設置到達前按 X 鍵然后按回車鍵將退出程序。如果超時時間設置為 0,攝像頭將一直工作,直到按下 X 鍵和回車鍵。使用 verbose(-v)參數(shù)可以顯示輸入確認提示,否則不會有任何提示。
      –signal, -s 信號模式,攝像頭會運行(-t)參數(shù)指定的時間,并且每次向攝像進程發(fā)送 USR1 信號時進行一次捕捉。該操作可以通過發(fā)送 kill 命令進行終止。您可以使用“pgrep raspistill”命令找到攝像進程的 ID。
      kill -USR1
      ? raspistillyuv
      raspistillyuv 的許多選項與 raspistill 是相同的。本節(jié)將對不同的部分進行講解。
      不支持的選項:
      –exif, –encoding, –thumb, –raw, –quality
      擴展選項:
      –rgb, -rgb 以 RGB888 形式保存未壓縮數(shù)據(jù),該選項強制圖像保存為每個通道為 8 bits 的 RGB 格式,而不是 YUV420 格式。

      【注意】在 raspistillyuv 中所保存的圖像在緩沖區(qū)中水平尺寸封裝為可被 16 整除(所以可能會在每行的結尾都會出現(xiàn)無用的字節(jié)以使寬度可被 16 整除)。緩沖區(qū)也會將垂直方向封裝為可被 16 整除,在 YUV 模式中,每個 Y、U、V 平面都會使用該方式進行封裝。

      ? raspivid
      –width, -w 設置圖像寬度,視頻的寬度。范圍為 64 到 1920。
      –height, -h 設置圖像高度,視頻的高度。范圍為 64 到 1080。
      –bitrate, -b 設置碼率。使用比特/秒為單位,所以 10Mbits/s 需要輸入 -b 10000000。對于 H264 編碼的 1080p30 高清視頻,碼率需要在 15Mbits/s 或以上。碼率最大為 25Mbits/s(-b 25000000),但大于 17Mbits/s 時,在 1080p30 中并沒有太大區(qū)別。
      –output -o 輸出文件名,指定輸出的文件名。如果不指定,將不保存到文件。如果文件名為“-”,將輸出發(fā)送至標準輸出設備。
      –verbose, -v 在運行過程中輸出詳細信息,在程序運行過程中,輸出調試/詳細信息。
      –timeout, -t 獲取圖片前的時間,程序將執(zhí)行指定的時長,然后進行獲取操作(前提是 output 已指定)。如果未指定,將設置為 5 秒。設置為 0 意味著程序將一直運行,直到按下 Ctrl-C 才會停止。
      –demo, -d 運行演示模式,該參數(shù)將循環(huán)使用所有攝像頭參數(shù),并且不會捕捉。而且無論是否完成所有的循環(huán),在超時周期到達時都會停止演示操作。循環(huán)之前的時間需要設置毫秒值。
      –framerate, -fps 指定錄制的視頻每秒的畫面數(shù)量,目前,最小的幀率為 2fps,最大為 30fps。似乎將來會有所改變。
      –penc, -e 在編碼完成后顯示預覽圖像,開啟該選項會在壓縮完成后顯示預覽圖像。顯示在預覽窗口中的圖像會因為壓縮的原因出現(xiàn)失真。正常情況下,預覽將會顯示攝像頭輸出的原始圖像。該功能在未來的版本中可能不再可用。
      –intra, -g 指定幀內(nèi)刷新周期(關鍵幀率/畫面組),為錄制的視頻設置幀內(nèi)刷新周期(畫面組)率。H.264 視頻在每個幀內(nèi)刷新周期中都使用了 I-frame。該選項指定了每個 I-frame 之間幀的數(shù)量。數(shù)字越大,生成的視頻尺寸越小,數(shù)字越小,視頻流將越龐大,直至出錯。
      –qp, -qp 設置量化參數(shù),為視頻流設置初始量化參數(shù)。范圍從 10 到 40,并且對所錄制視頻的質量有極大的影響。值越大,質量越低,并且文件尺寸越小。碼流設置為 0,并結合此參數(shù)一起使用,可用來設置一個完全動態(tài)碼流的視頻。
      –profile, -pf 為錄制的視頻指定 H264 配置文件,為錄制的視頻指定 H264 配置文件。選項為:baseline、main、high。
      –inline, -ih Insert PPS, SPS headers 插入 PPS,SPS 頭,強制視頻流的 I-frame 都包含 PPS 和 SPS 頭信息。某些視頻封裝格式需要該信息。例如 Apple HLS。這些頭信息體積很小,所以不會讓文件的尺寸增加太多。
      –timed, -td 設置定時切換捕捉和暫停,該選項可以使視頻捕捉在特定的時間里暫停并重新開始記錄。需要指定開啟時間和關閉時間兩個值。開啟時間是視頻的捕捉時長,關閉時間是暫停的時長。總錄制時長是又超時選項進行定義的。注意,由于開啟時間和關閉時間的設置原因,錄制時長將略微比超時設置的時間要長。
      例如

      $raspivid -o test.h264 -t 25000 -timed 2500,5000
      

      將進行 25 秒的錄制操作。錄制操作包括若干個 2500 毫秒(2.5 秒)錄制和 5000 毫秒(5秒)暫停的操作,并且重復時長超過 20 秒。所以該錄制過程中實際只錄制了 10 秒的內(nèi)容。包括 4 段 2.5 秒的視頻片斷 = 被若干個 5 秒鐘暫停操作分隔開的 10 秒鐘視頻。

      –keypress, -k 使用回車鍵在錄制和暫停兩種狀態(tài)間進行切換,每次點擊回車鍵將會暫停或重新開始錄制進程。點擊 X 鍵后點擊回車鍵將停止錄制并關閉程序。注意,超時設置值將影響錄制結束時間,但僅在每次回車鍵點擊后進行檢查,所以如果系統(tǒng)正在等待按鍵操作,盡管超時設置已過期,錄制進程退出前也會等待按鍵操作。

      –signal, -s 使用 SIGUSR1 信號在錄制和暫停兩種狀態(tài)間進行切換,向 Raspivid 進程發(fā)送 USR1 信號來切換錄制和暫停。該操作可以通過使用 kill 命令來實現(xiàn)。您可以使用“pgrep raspivid” 命令找到 raspivid 的進程 ID。
      kill -USR1

      【注意】超時設置值將影響錄制結束時間,但僅在每次發(fā)送 SIGUSR1 信號后進行檢查,所以如果系統(tǒng)正在等待信號,盡管超時設置已過期,錄制進程退出前也會等待信號的發(fā)送操作。

      –initial, -i 定義啟動時的初始狀態(tài)。定義攝像頭初始狀態(tài)為暫停或立即開始錄像。選項可以為“record”(錄像)或“pause”(暫停)。注意,如果您設置的超時時長很短,而且初始狀態(tài)設置為“暫停”,那么將不會錄制任何輸出的內(nèi)容。

      –segment, -sg 將視頻流分段存儲到多個文件,與存儲在單個文件中不同,該參數(shù)將視頻分段存儲在以毫秒為單位所指定長度的數(shù)個文件中。為了將生成的文件命名為不同的名稱,您需要在文件名中合適的位置添加 %04d 或類似的參數(shù)來讓文件名中顯示計數(shù)值。例如:

      –segment 3000 -o video%04d.h264,將分割成每段長度 3000 毫秒(3 秒)并且命名為 video0001.h264,video0002.h264 等。每個段落都是可無縫連接的(段落之間不會丟幀),但每個片段的長度將取決于幀內(nèi)周期值,原因是每個分割的段落都需要起始于 I-frame 處。因此,每個段落都會等于或大于指定的時間長度。

      –wrap, -wr 設置最大分段數(shù),當輸出分段視頻時,該參數(shù)設置了最大分段數(shù),并且達到最大值時,將返回到初始的第一個段落。該參數(shù)賦予了錄制分段視頻的功能,但是將覆蓋之前生成的文件。所以,如果設置為 4,那么上面的例子中所生成的文件名為 video0001.h264,video0002.h264,video0003.h264,video0004.h264。而且,一旦 video0004.h264 文件錄制完畢后,計數(shù)將回到 1,并且 video0001.h264 將被覆蓋。

      –start, -sn 設置初始段落數(shù),當輸出分段視頻時,該參數(shù)為初始的段落數(shù),它允許從指定的段落恢復之前的錄制操作。默認值為 1。

      6.1.5應用示例

      ? 圖像捕捉
      默認情況下,傳感器將以其支持的最高分辨率進行捕捉??梢栽诿钚兄型ㄟ^使用 -w 和 -h 參數(shù)進行更改。
      # 兩秒鐘(時間單位為毫秒)延遲后拍攝一張照片,并保存為 image.jpg
      raspistill -t 2000 -o image.jpg
      # 拍攝一張自定義大小的照片。
      raspistill -t 2000 -o image.jpg -w 640 -h 480
      # 降低圖像質量,減小文件尺寸
      raspistill -t 2000 -o image.jpg -q 5
      # 強制使預覽窗口出現(xiàn)在坐標為 100,100 的位置,并且尺寸為寬 300 和高 200 像素。
      raspistill -t 2000 -o image.jpg -p 100,100,300,200
      # 禁用預覽窗口
      raspistill -t 2000 -o image.jpg -n
      # 將圖像保存為 PNG 文件(無損壓縮格式,但是要比 JPEG 速度慢)。注意,當選擇圖像編碼時,文件擴展名將被忽略。
      raspistill -t 2000 -o image.png –e png
      # 向 JPEG 文件中添加一些 EXIF 信息。該命令將會把作者名稱標簽設置為 Dreamcolor,GPS 海拔高度為 123.5米。
      raspistill -t 2000 -o image.jpg -x IFD0.Artist=Dreamcolor -x GPS.GPSAltitude=1235/10
      # 設置浮雕風格圖像特效
      raspistill -t 2000 -o image.jpg -ifx emboss
      # 設置 YUV 圖像的 U 和 V 通道為指定的值(128:128 為黑白圖像)
      raspistill -t 2000 -o image.jpg -cfx 128:128
      # 僅顯示兩秒鐘預覽圖像,而不對圖像進行保存。
      raspistill -t 2000
      # 間隔獲取圖片,在 10 分鐘(10 分鐘 = 600000 毫秒)的時間里,每 10 秒獲取一張,并且命名為 image_number_001_today.jpg,image_number_002_today.jpg… 的形式,并且最后一張照片將命名為 latest.jpg。
      raspistill -t 600000 -tl 10000 -o image_num_%03d_today.jpg -l latest.jpg
      # 獲取一張照片并發(fā)送至標準輸出設備
      raspistill -t 2000 -o -
      # 獲取一張照片并保存為一個文件
      raspistill -t 2000 -o - > my_file.jpg
      #攝像頭一直工作,當按下回車鍵時獲取一張照片。
      raspistill -t 0 -k -o my_pics%02d.jpg

      ? 視頻捕捉
      圖像尺寸和預覽設置與圖像捕捉相同。錄制的視頻默認尺寸為 1080p(1920×1080)
      # 使用默認設置錄制一段 5 秒鐘的視頻片段(1080p30)
      raspivid -t 5000 -o video.h264
      # 使用指定碼率(3.5Mbits/s)錄制一段 5 秒鐘的視頻片段
      raspivid -t 5000 -o video.h264 -b 3500000
      # 使用指定幀率(5fps)錄制一段 5 秒鐘的視頻片段
      raspivid -t 5000 -o video.h264 -f 5
      # 發(fā)送到標準輸出設備一段 5 秒鐘經(jīng)過編碼的攝像頭流圖像
      raspivid -t 5000 -o -
      # 保存到文件一段 5 秒鐘經(jīng)過編碼的攝像頭流圖像
      raspivid -t 5000 -o - > my_file.h264

      6.1.6查看圖片

      ? 方式一
      安裝可以通過終端打開截圖的shotwell。

      $sudo apt-get install shotwell
      

      查看圖片命令。

      $ sudo shotwell image.jpg
      

      ? 方式二
      安裝可以通過終端打開截圖的gpicview。

      $sudo apt-get install gpicview 
      

      查看圖片命令。

      $sudo gpicview image.jpg
      

      6.1.7截圖

      想在樹莓派上面截圖或截屏用截圖工具scrot 通過命令行就能做到。

      1.安裝
      在Raspbian上安裝scrot:
      命令: sudo apt-get install scrot

      2.截屏
      截取整個屏幕:scrot (截取圖片的默認名稱通常會有日期時間和分辨率,比如:“2016-10-10-062821_1024x768_scrot.png”)
      指定截取圖片的名字:scrot example.png (那么文件名就會叫“example” ,擴展名不要丟,另外改變擴展名也不能改變文件格式)
      指定文件位置:scrot /home/pi/Desktop/example.png(截圖文件“example.png”就會被保存在 “/home/pi/Desktop/” ,注意,只有路徑?jīng)]有文件名是不行的)
      截取部分圖片:scrot -s 然后拖動要截圖的區(qū)域(scrot -s /home/pi/Desktop/example.png 命名和指定路徑)
      ? 其他命令參數(shù):
      -h 顯示更多幫助
      -v 獲取當前版本
      -d x 添加X秒的延遲拍攝
      -c 添加一個倒計時延遲拍攝
      -s 允許用戶用鼠標捕捉特定區(qū)域
      -u 捕捉當前活動窗口
      -q X 指定圖像質量百分率X(默認75)
      -t X 創(chuàng)建一個百分比大小為X的縮略圖
      -e 在截圖后指定一個命令來運行

      6.1.8視屏播放

      ? MP4Box
      raspivid 通常會將錄制的視頻保存為 .h264 格式的文件。而我們使用的很多播放器可能無法正常播放該格式的視頻文件。這就需要我們將生成的 .h264 格式的文件封裝到播放器能夠識別的視頻容器格式中(比如封裝為 mp4 格式)。有很多視頻處理軟件可以達到這個目的,您也可以直接在 Raspberry Pi 上直接進行封裝。這里介紹的是“gpac”中的“MP4Box”。安裝和使用的方法如下:

      $sudo apt-get update
      $sudo apt-get install gpac
      $sudo MP4Box -add filename.h264 filename.mp4
      

      ? Omxplayer
      ? 播放

      $sudo omxplayer –o hdmi 文件名
      

      ? 播放控制
      Key Action
        加速
        減速
      j   上一條音軌
      k   下一條音軌
      i   上一節(jié)
      o   下一節(jié)
      n   上一條字幕軌
      m   下一條字幕軌
      s   顯示/不顯示字幕
      q   退出
      空格或p  暫停/繼續(xù)

      • 減小音量
      • 增加音量
        左   后退30
        右   前進30
        上   后退600
        下   前進600

      6.1.9 擴展閱讀

      樹莓派專用CSI攝像頭插到樹莓派的CSI口上并在在raspi-config中打開后就可以使用Raspistill命令直接使用,但如果在OpenCV中調用CSI攝像頭會出現(xiàn)無數(shù)據(jù)的現(xiàn)象(cv2.VideoCapture(0)這時不會報錯)。

      這是因為樹莓派中的camera module是放在/boot/目錄中以固件形式加載的,不是一個標準的V4L2的攝像頭驅動,所以加載起來之后會找不到/dev/video0的設備節(jié)點。我們在/etc/modules里面添加一行bcm2835-v4l2(小寫的L)就能解決問題。

      $sudo vi /etc/modules
      

      添加:bcm2835-v4l2

      這里寫圖片描述

      6.2樹莓派實現(xiàn)動作捕捉、抓拍并存儲照片

      6.2.1開通樹莓派SSH、VNC服務、開通攝像頭

      將樹莓派接上鍵盤、鼠標和顯示屏。進入Raspbian系統(tǒng),打開命令行終端,輸入:

      $ sudo raspi-config
      

      這里寫圖片描述

      圖3

      當然也可直接在樹莓派上配置。
      遠程登錄,默認用戶名:pi, 默認密碼:raspberry

      6.2.2 PC機遠程操作樹莓派

      使用PC機遠程通過命令行或VNC操作樹莓派要比樹莓派接上鍵盤鼠標,盯著小屏幕看方便很多。具體操作步驟如下:
      1)樹莓派接入網(wǎng)絡,在PC終端輸入:(注:Windows下要用PuTTY軟件作為命令行終端,Mac電腦可以直接輸入)

      $ ssh pi@樹莓派的IP地址
      

      輸入遠程連接密碼。如果跳到:
      pi@raspberrypi:~ $
      說明連接成功,你現(xiàn)在可以在pc機上用命令行操作樹莓派了。
      2)在pc機上用VNC連接樹莓派。關于SVN的使用請讀者看前面的章節(jié)。

      6.2.3安裝動作捕捉腳本

      將附件的腳本拷貝到樹莓派的 /home/pi 目錄下創(chuàng)建一個新目錄用來保存抓拍的照片:

      $ sudo mkdir picam  
      

      然后就可以執(zhí)行腳本了:

      $ sudo python picam.py  
      

      這時,如果有任何物體在移動,樹莓派的攝像頭就會抓拍,并保存到/home/pi/picam文件夾,在pc機上,就可以遠程用VNC查看這些照片。

      【附件】picam.py的代碼

      #!/usr/bin/python
      
      # original script by brainflakes, improved by pageauc, peewee2 and Kesthal
      # www.raspberrypi.org/phpBB3/viewtopic.php?f=43&t=45235
      
      # You need to install PIL to run this script
      # type "sudo apt-get install python-imaging-tk" in an terminal window to do this
      
      import StringIO
      import subprocess
      import os
      import time
      from datetime import datetime
      from PIL import Image
      
      # Motion detection settings:
      # Threshold          - how much a pixel has to change by to be marked as "changed"
      # Sensitivity        - how many changed pixels before capturing an image, needs to be higher if noisy view
      # ForceCapture       - whether to force an image to be captured every forceCaptureTime seconds, values True or False
      # filepath           - location of folder to save photos
      # filenamePrefix     - string that prefixes the file name for easier identification of files.
      # diskSpaceToReserve - Delete oldest images to avoid filling disk. How much byte to keep free on disk.
      # cameraSettings     - "" = no extra settings; "-hf" = Set horizontal flip of image; "-vf" = Set vertical flip; "-hf -vf" = both horizontal and vertical flip
      threshold = 10
      sensitivity = 20
      forceCapture = True
      forceCaptureTime = 60 * 60 # Once an hour
      filepath = "/home/pi/picam"
      filenamePrefix = "capture"
      diskSpaceToReserve = 40 * 1024 * 1024 # Keep 40 mb free on disk
      cameraSettings = ""
      
      # settings of the photos to save
      saveWidth   = 1296
      saveHeight  = 972
      saveQuality = 15 # Set jpeg quality (0 to 100)
      
      # Test-Image settings
      testWidth = 100
      testHeight = 75
      
      # this is the default setting, if the whole image should be scanned for changed pixel
      testAreaCount = 1
      testBorders = [ [[1,testWidth],[1,testHeight]] ]  # [ [[start pixel on left side,end pixel on right side],[start pixel on top side,stop pixel on bottom side]] ]
      # testBorders are NOT zero-based, the first pixel is 1 and the last pixel is testWith or testHeight
      
      # with "testBorders", you can define areas, where the script should scan for changed pixel
      # for example, if your picture looks like this:
      #
      #     ....XXXX
      #     ........
      #     ........
      #
      # "." is a street or a house, "X" are trees which move arround like crazy when the wind is blowing
      # because of the wind in the trees, there will be taken photos all the time. to prevent this, your setting might look like this:
      
      # testAreaCount = 2
      # testBorders = [ [[1,50],[1,75]], [[51,100],[26,75]] ] # area y=1 to 25 not scanned in x=51 to 100
      
      # even more complex example
      # testAreaCount = 4
      # testBorders = [ [[1,39],[1,75]], [[40,67],[43,75]], [[68,85],[48,75]], [[86,100],[41,75]] ]
      
      # in debug mode, a file debug.bmp is written to disk with marked changed pixel an with marked border of scan-area
      # debug mode should only be turned on while testing the parameters above
      debugMode = False # False or True
      
      # Capture a small test image (for motion detection)
      def captureTestImage(settings, width, height):
          command = "raspistill %s -w %s -h %s -t 200 -e bmp -n -o -" % (settings, width, height)
          imageData = StringIO.StringIO()
          imageData.write(subprocess.check_output(command, shell=True))
          imageData.seek(0)
          im = Image.open(imageData)
          buffer = im.load()
          imageData.close()
          return im, buffer
      
      # Save a full size image to disk
      def saveImage(settings, width, height, quality, diskSpaceToReserve):
          keepDiskSpaceFree(diskSpaceToReserve)
          time = datetime.now()
          filename = filepath + "/" + filenamePrefix + "-%04d%02d%02d-%02d%02d%02d.jpg" % (time.year, time.month, time.day, time.hour, time.minute, time.second)
          subprocess.call("raspistill %s -w %s -h %s -t 200 -e jpg -q %s -n -o %s" % (settings, width, height, quality, filename), shell=True)
          print "Captured %s" % filename
      
      # Keep free space above given level
      def keepDiskSpaceFree(bytesToReserve):
          if (getFreeSpace() < bytesToReserve):
              for filename in sorted(os.listdir(filepath + "/")):
                  if filename.startswith(filenamePrefix) and filename.endswith(".jpg"):
                      os.remove(filepath + "/" + filename)
                      print "Deleted %s/%s to avoid filling disk" % (filepath,filename)
                      if (getFreeSpace() > bytesToReserve):
                          return
      
      # Get available disk space
      def getFreeSpace():
          st = os.statvfs(filepath + "/")
          du = st.f_bavail * st.f_frsize
          return du
      
      # Get first image
      image1, buffer1 = captureTestImage(cameraSettings, testWidth, testHeight)
      
      # Reset last capture time
      lastCapture = time.time()
      
      while (True):
      
          # Get comparison image
          image2, buffer2 = captureTestImage(cameraSettings, testWidth, testHeight)
      
          # Count changed pixels
          changedPixels = 0
          takePicture = False
      
          if (debugMode): # in debug mode, save a bitmap-file with marked changed pixels and with visible testarea-borders
              debugimage = Image.new("RGB",(testWidth, testHeight))
              debugim = debugimage.load()
      
          for z in xrange(0, testAreaCount): # = xrange(0,1) with default-values = z will only have the value of 0 = only one scan-area = whole picture
              for x in xrange(testBorders[z][0][0]-1, testBorders[z][0][1]): # = xrange(0,100) with default-values
                  for y in xrange(testBorders[z][1][0]-1, testBorders[z][1][1]):   # = xrange(0,75) with default-values; testBorders are NOT zero-based, buffer1[x,y] are zero-based (0,0 is top left of image, testWidth-1,testHeight-1 is botton right)
                      if (debugMode):
                          debugim[x,y] = buffer2[x,y]
                          if ((x == testBorders[z][0][0]-1) or (x == testBorders[z][0][1]-1) or (y == testBorders[z][1][0]-1) or (y == testBorders[z][1][1]-1)):
                              # print "Border %s %s" % (x,y)
                              debugim[x,y] = (0, 0, 255) # in debug mode, mark all border pixel to blue
                      # Just check green channel as it's the highest quality channel
                      pixdiff = abs(buffer1[x,y][1] - buffer2[x,y][1])
                      if pixdiff > threshold:
                          changedPixels += 1
                          if (debugMode):
                              debugim[x,y] = (0, 255, 0) # in debug mode, mark all changed pixel to green
                      # Save an image if pixels changed
                      if (changedPixels > sensitivity):
                          takePicture = True # will shoot the photo later
                      if ((debugMode == False) and (changedPixels > sensitivity)):
                          break  # break the y loop
                  if ((debugMode == False) and (changedPixels > sensitivity)):
                      break  # break the x loop
              if ((debugMode == False) and (changedPixels > sensitivity)):
                  break  # break the z loop
      
          if (debugMode):
              debugimage.save(filepath + "/debug.bmp") # save debug image as bmp
              print "debug.bmp saved, %s changed pixel" % changedPixels
          # else:
          #     print "%s changed pixel" % changedPixels
      
          # Check force capture
          if forceCapture:
              if time.time() - lastCapture > forceCaptureTime:
                  takePicture = True
      
          if takePicture:
              lastCapture = time.time()
              saveImage(cameraSettings, saveWidth, saveHeight, saveQuality, diskSpaceToReserve)
      
          # Swap comparison buffers
          image1 = image2
          buffer1 = buffer2
      

      6.2.4設置腳本開機啟動

      在終端上輸入:

      $ sudo vi /etc/rc.local  
      

      就會出現(xiàn)一個文本編輯器,
      在文本內(nèi)容的exit 0 上面添加一行:

      $ python /home/pi/picam.py  
      

      然后保存更改。
      重啟樹莓派:

      $ sudo reboot  
      

      即可實現(xiàn)開機自動運行。之所以選擇這個腳本是因為它簡潔,有效,而且還能自動清除過期的圖片。相比之下,motion這個軟件就顯得比較復雜。有興趣的同學還可以修改腳本實現(xiàn)抓拍后自動上傳到網(wǎng)盤,或發(fā)送郵件等功能。

      ##6.3樹莓派+motion 搭建攝像頭監(jiān)控系統(tǒng)
      1. 安裝

      $sudo apt install motion
      

      2. 配置motion選項
      備份配置文件

      $sudo cp /etc/motion/motion.conf /etc/motion/motion.conf.bak
      

      打開配置文檔

      $sudo vim /etc/motion/motion.conf
      

      更改文檔中以下內(nèi)容

      daemon on                        #開啟守護進程(選配)
      target_dir /home/pi/motion-images    #圖片保存的路徑
      #videodevice /dev/video0            #攝像頭設備(默認)可修改            
      stream_localhost off                 #允許通過網(wǎng)頁查看攝像頭
      stream_auth_method 2               #開啟密碼認證
      stream_authentication 用戶名:密碼    #網(wǎng)頁查看攝像頭的用戶名和密碼
      

      創(chuàng)建一個目錄來存儲Motion拍下的照片

      $mkdir ~/motion-images
      

      官方詳細配置說明:http:///foswiki/bin/view/Motion/ConfigFileOptions
      3.開啟motion

      $ sudo service motion start
      $sudo motion
      

      用瀏覽器登陸樹莓派的網(wǎng)址 192.168.3.233:8081 ,會彈出用戶名和密碼的對話框,輸入用戶名和密碼后看到圖像就成功了。需要登錄兩次。

      這里寫圖片描述

      圖4

      4. 設置為開機運行(選配)

      $sudo vim /etc/rc.local
      

      在exit 0前添加 motion , 保存,就會開機自動運行了。
      5. 部分詳細配置選項的翻譯

      表1
      ffmpeg_duplicate_frames 調試模式,只看到變化的圖像
      選項 Range/Values Default 說明
      auto_brightness Values: on,off Default: off 讓motion自動調節(jié)視頻的的亮度,只適用于不帶有自動亮度調節(jié)的攝像機
      brightness Values: 0-255 Default: 0 (disabled) 調整攝像機的亮度
      saturation Values: 0 - 255 Default: 0 (disabled) 調整攝像機的顏色飽和度
      hueValues: 0 - 255 Default: 0 (disabled) 調整攝像機的色調
      contrast Values: 0-255 Default: 0 (disabled) 調整攝像機的對比度
      daemon Values: on,off Default: off 以守護進程在后臺運行。這個選項只能放在motion.conf,不能放在 thread config file
      emulate_motion Values: on, off Default: off 即使沒有運動物體也要保存圖像
      ffmpeg_output_movies Values: on, off Default: off 是否保存視頻
      ffmpeg_bps Values: 0 - 9999999 Default: 400000 視頻比特率
      ffmpeg_variable_bitrate Values: 0, 2 -31 Default: 0 (disabled) 動態(tài)比特率,如果開啟這個功能ffmpeg_bps將被忽略,0為關閉,2為最好質量,31為最差質量
      Values: on, off Default: on 為了達到每秒的幀數(shù)要求,會復制一下幀填充空白時間,關掉這個功能后每個幀都緊接下一個幀,看起來像快進
      ffmpeg_output_debug_movies Values: on, off Default: off
      ffmpeg_video_codec Values:mpeg4, msmpeg4, swf, flv, ffv1, mov, ogg, mp4, mkv, hevc Default: mpeg4 視頻格式
      framerate Values: 2 - 100 Default: 100 (no limit) 幀速率,每秒多少幀
      frequency Values: 0 - 999999 Default: 0 (Not set) 頻率協(xié)調 Hz
      lightswitch Values: 0 - 100 Default: 0 (disabled) 忽略光照強度改變引起的變化
      locate_motion_mode Values: on, off, preview Default: off 給運動物體用方框標出
      locate_motion_style Values: box, redbox, cross, redcross Default: box 標記風格
      max_movie_time Values: 0 (infinite) - 2147483647 Default: 3600 最大視頻時間
      minimum_frame_time Values: 0 - 2147483647 Default: 0 最小幀間隔,設置為0表示采用攝像頭的幀率
      minimum_motion_frames Values: 1 - 1000s Default: 1 捕捉持續(xù)至少指定時間的運動幀
      movie_filename Values: Max 4095 characters Default: %v-%Y%m%d%H%M%S 視頻的文件名
      ffmpeg_timelapse Values: 0-2147483647 Default: 0 (disabled) 間隔時間,拍攝延時視頻
      ffmpeg_timelapse_mode Values: hourly, daily, weekly-sunday, weekly-monday, monthly, manual Default: daily 延時拍攝模式
      timelapse_filename Values: Max 4095 characters Default: %v-%Y%m%d-timelapse 延時拍攝的文件名
      output_pictures Values: on,off,first,best,center Default: on 是否保存圖片和模式設置
      output_debug_pictures Values: on,off Default: off 圖片調試模式,只輸出運動物體
      picture_filename Values: Max 4095 characters Default: %v-%Y%m%d%H%M%S-%q 圖片文件名
      picture_type Values: jpeg,ppm Default: jpeg 圖片類型
      post_capture Values: 0 - 2147483647 Default: 0 (disabled) 運動在持續(xù)多少幀之后才被捕捉
      pre_capture Values: 0 - 100s Default: 0 (disabled) 輸出圖像包括捕捉到運動的前幾秒
      quality Values: 1 - 100 Default: 75 jpg圖像的質量
      quiet Values: on, off Default: off 安靜模式,檢測到運動不輸出嗶
      rotate Values: 0, 90, 180, 270 Default: 0 (not rotated) 旋轉圖像角度
      stream_auth_method Values: 0,1,2 Default: 0 網(wǎng)頁監(jiān)控身份認證方法:0-無,1-基本,2-MD5
      stream_authentication Values: username:password Default: Not defined 網(wǎng)頁監(jiān)控用戶名和密碼
      stream_limit Values: 0 - 2147483647 Default: 0 (unlimited) 限制幀的數(shù)量
      stream_localhost Values: on, off Default: on 是否只能本地訪問網(wǎng)絡攝像頭
      stream_maxrate Values: 1 - 100 Default: 1 限制網(wǎng)絡攝像頭幀速率
      stream_port Values: 0 - 65535 Default: 0 (disabled) 網(wǎng)絡攝像頭端口
      stream_quality Values: 1 - 100 Default: 50 網(wǎng)絡攝像頭傳輸質量
      switchfilter Values: on, off Default: off 過濾器開關,過濾器用來區(qū)分真正的運動和噪聲
      target_dir Values: Max 4095 characters Default: Not defined = current working directory 視頻和圖片的保存路徑
      videodevice Values: Max 4095 characters Default: /dev/video0 攝像頭設備名
      height Values: Device Dependent Default: 288 圖像高度,范圍跟攝像機相關
      width Values: Device Dependent Default: 352 圖像寬度,范圍跟攝像機相關
      process_id_file Values: Max 4095 characters Default: Not defined 保存PID的文件,推薦/var/run/motion.pid
      database_busy_timeout Values: 0 .. positive integer Default: 0 數(shù)據(jù)庫等待超時時間,毫秒

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多