自定义相机Camera,相机/视频实时滤镜 - android
? 使用相機或自定義相機,借助Android SDK Camera類的,或Camera2的類。全新的設計的Camera2是從 SDK 5.0(API Level 21)開始才被引入的,取代原來Camera.Java。用戶系統版本參差不齊,所以暫時還是使用Camera來進行開發。Camera類被用于獲取圖片設置,start/stop 預覽,快照圖片,恢復視頻編碼的幀,Camera是一個client對于Camera Service來說,將管理Camera 硬件相關.新API android.hardware.camera2. ?
? Android 5.0后用了Camera2下的API, 這些API不僅提供了Android系統的拍照功能,還能支持RAW照片輸出,甚至允許程序調整相機的對焦模式,曝光模式,快門等。
??幾個圖像像素數據處理過程中的幾個知識點:像素格式,圖像拉伸,YUV像素取值范圍,色域。
美顏有兩步,一個是磨皮,一個是美白,要想正確美顏,所以還需要加上人臉識別技術和皮膚識別技術。
濾鏡,圖形變換處理核心是拿到紋理對象的rgb做算法處理.
? 圖像濾鏡處理的兩種方式:RGB點乘運算;GPU的矩陣運算(效率更高)。圖片處理中的計算:RGBA~利用自帶的方法修改色調,飽和度,亮度來修改圖片;矩陣~利用矩陣計算得到新的矩陣修改圖片。
Google相機開源方案- https://github.com/google/cameraview
做相機?首學Google 的開源相機方案!- https://mp.weixin.qq.com/s/t2uDAOTiLamKxAd1CmUbtQ
Android 5.0以下的API為Camera 而 Android 5.0以上的API為Camera2,并且各大手機廠商對于Camera2的支持程度也不同。
對于不支持Camera2的設備來說,需要降級使用Camera.常見有后臺場景,鎖屏場景。相機是共享資源,其它程序訪問使用時容易發生沖突,因此需要正確地釋放。
-- 相機,對焦模式配置參數,可以通過Parameters.getFocusMode()接口獲取。
Camera.Parameters.FOCUS_MODE_AUTO 自動對焦模式,攝影小白專用模式;
Camera.Parameters.FOCUS_MODE_FIXED 固定焦距模式,拍攝老司機模式;
Camera.Parameters.FOCUS_MODE_EDOF 景深模式,文藝女青年最喜歡的模式;
Camera.Parameters.FOCUS_MODE_INFINITY 遠景模式,拍風景大場面的模式;
Camera.Parameters.FOCUS_MODE_MACRO 微焦模式,拍攝小花小草小螞蟻專用模式;
-- 相機,場景模式配置參數,可以通過Parameters.getSceneMode()接口獲取。
Camera.Parameters.SCENE_MODE_BARCODE 掃描條碼場景,NextQRCode項目會判斷并設置為這個場景;
Camera.Parameters.SCENE_MODE_ACTION 動作場景,就是抓拍跑得飛快的運動員、汽車等場景用的;
Camera.Parameters.SCENE_MODE_AUTO 自動選擇場景;
Camera.Parameters.SCENE_MODE_HDR 高動態對比度場景,通常用于拍攝晚霞等明暗分明的照片;
Camera.Parameters.SCENE_MODE_NIGHT 夜間場景;
一個自定義 camera 1 - https://github.com/yangmingchuan/SunCamera
Camera2 - https://github.com/yangmingchuan/SunCamera/blob/f78570f4e2e68d1f86bb68e2dc00a344d4b3e101/app/src/main/java/cn/tongue/tonguecamera/ui/GoogleCameraActivity.java
android-Camera2Basic- https://github.com/googlesamples/android-Camera2Basic/#readme
> 自定義相機
-- ?Android系統提供了兩種使用手機相機資源實現拍攝功能的方法:
? 1.一種是直接通過Intent調用系統相機組件,這種方法快速方便,適用于直接獲得照片的場景,如上傳相冊,微博、朋友圈發照片等。
? 2.另一種是使用相機API來定制自定義相機,這種方法適用于需要定制相機界面或者開發特殊相機功能的場景,如需要對照片做裁剪、濾鏡處理,添加貼紙,表情,地點標簽等。
-- 攝像預覽其實就是Android的Camera開發,對于Android的Camera開發,一般有兩種方式,一種是借助Intent和MediaStroe調用系統Camera App程序來實現拍照和攝像功能,另外一種是根據Camera API自寫Camera程序,自然第一種不能作為我們的濾鏡開發,所以我們采用第二種方式。
? Camera:最主要的類,用于管理和操作camera資源。它提供了完整的相機底層接口,支持相機資源切換,設置預覽/拍攝尺寸,設定光圈、曝光、聚焦等相關參數,獲取預覽/拍攝幀數據等功能
? SurfaceView:用于繪制相機預覽圖像的類,提供給用戶實時的預覽圖像。普通的view以及派生類都是共享同一個surface的,所有的繪制都必須在UI線程中進行。(而surfaceview是一種比較特殊的view,它并不與其他普通view共享surface,而是在內部持有了一個獨立的surface,surfaceview負責管理這個surface的格式、尺寸以及顯示位置。)由于UI線程還要同時處理其他交互邏輯,因此對view的更新速度和幀率無法保證,而surfaceview由于持有一個獨立的surface,因而可以在獨立的線程中進行繪制,因此可以提供更高的幀率。自定義相機的預覽圖像由于對更新速度和幀率要求比較高,所以比較適合用surfaceview來顯示。
-- Android HOME鍵、鎖屏對SurfaceView的影響:
? 1.在自定義相機頁面按HOME鍵時的執行流程:
?程序運行->按HOME鍵;Activity調用的順序是onPause->onStop;SurfaceView調用了surfaceDestroyed方法;然后再切回程序;Activity調用的順序是onRestart->onStart->onResume;SurfaceView調用了surfaceCreated->surfaceChanged方法;
? 2.而對于鎖屏,其執行流程則是:
?Activity只調用onPause方法;解鎖后Activity調用onResume方法;SurfaceView中surfaceholder.callback的所有方法都沒有執行;
? 3.推測是鎖屏下系統并沒有改變surfaceview的可見性,于是嘗試在onPause和onResume時通過手動設置surfaceview的visibile屬性。
-- Android相機開發的相關知識、流程,以及容易遇到的坑,
Android相機開發那些坑- http://blog.csdn.net/love_techlive/article/details/51331183
Multimedia框架Camera框架初識及自定義相機案例-- http://blog.csdn.net/hejjunlin/article/details/52738492
Multimedia框架Camera框架之Camera2補充- http://blog.csdn.net/hejjunlin/article/details/52751055
優美的Android自定義相機模塊- http://download.csdn.net/download/gao_chun/9084853?
自定義相機模塊-https://github.com/xplodwild/android_packages_apps_Focal?
打開前置攝像頭并且實時獲取數據- https://github.com/sadaharusong/FrontCamera/
TextureView和SurfaceTexture預覽Camera拍照demo- http://blog.csdn.net/yanzi1225627/article/details/33313707
PlayCamera,TextureView預覽Camera 拍照完整demo- http://download.csdn.net/detail/yanzi1225627/7540903
Android Multimedia框架總結案例,包含MediaPlayer,Camera等- https://github.com/hejunlin2013/MultiMediaSample
<uses-permission android:name="android.permission.FLASHLIGHT" />
Android-Camera開發- http://blog.csdn.net/oShunz/article/category/5952777
> 視頻處理如模糊效果、水印等
?Android 也有 GPUImage 這個庫的移植,叫做 android-gpuimage。同時,Google 官方開源了一個偉大的庫,覆蓋了 Android 上面很多多媒體和圖形圖像相關的處理。各種需求如美顏、水印、連麥互動等,如美顏、視頻水印、濾鏡、連麥等。如打上時間戳或者公司 Logo 的水印,祛斑美顏和聲音混淆等處理。
?常見的濾鏡效果GPUImage 地址:https://github.com/BradLarson/GPUImage。
?除了 iOS 端之外,Android 也有 GPUImage 這個庫的移植:https://github.com/CyberAgent/android-gpuimage。
?同時,Google 官方也開源了一個偉大的庫,覆蓋了 Android 上面很多多媒體和圖形圖像相關的處理:https://github.com/google/grafika。
Android中OpenGL濾鏡和RenderScript圖片處理- https://www.jianshu.com/p/66d0fcb902ab
Android中濾鏡使用OpenGL和RenderScript處理圖片- https://github.com/liweiping1314521/RiemannCamera/
> 相機濾鏡
? 美圖秀秀,Instagram,aillias等優秀相機APP的效果。
? 拍照時的實時濾鏡(onPreviewFrame Android )和靜態濾鏡。Android平臺的濾鏡:相機濾鏡功能,圖片美化濾鏡功能,社交分享濾鏡功能。lomo濾鏡。HSL色彩模式是工業界的一種顏色標準,是通過對色調(H)、飽和度(S)、亮度(L)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,HSL即是代表色調,飽和度,亮度三個通道的顏色,這個標準幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統之一。
? 短視頻的特效處理,每秒鐘要處理幾十張甚至更多的視頻畫面,所以簡單的 C 語言處理算法并不能滿足性能上的要求,我們需要使用手機的硬件加速能力,目前除了常見的 OpenGL 等 API 之外,還有如 Vulkan, DirectX, Metal 等可選方案。就目前而言,OpenGL 在各平臺上通用性最好。
-- OpenGL ES 2.0來實現濾鏡,RenderScript實現濾鏡
?Android支持三種高性能運算的方式:RenderScript, OpenGL ES,JNI (with ARM NEON)。多實時濾鏡的實現確實是一項對硬件性能和軟件編寫都具有很高要求的任務。使用opencv,簡單實現人像優化功能:美白、膚色、祛斑和磨皮。GLES20,openGL ES實現人像優化。
? 目前Android平臺優質的預覽數據實時處理開源代碼不多,例如android-gpuimage,采用將YUV數據在NDK層轉化為RGB數據,由OpenGL渲染到屏幕中,濾鏡算法由Shader實現;其他方面,經過研究,目前主要有以下5種思路實現:
?1.不轉換,直接由OpenGL繪制,采用Shader實現圖像處理(因處理算法和渲染圖片大部分采用RGB格式,此方案暫不考慮,僅提出可能性);
?2.通過C/C++實現YUV->RGB和圖像處理,合成Bitmap,由CPU繪制在Canvas上;
?3.通過C/C++實現YUV->RGB和圖像處理,在NDK層直接繪制在SurfaceView上;
?4.通過C/C++實現YUV->RGB,采用Shader實現圖像處理,采用OpenGL繪制(android-gpuimage);
?5.通過Shader實現YUV->RGB和圖像處理,采用OpenGL繪制。(最終采用方案)
? 濾鏡的開發主要是寫片段著色器,從而實現各種濾鏡效果。 即通過在C++層實現YUV-RGB轉換,通過OpenGL繪制,通過片段著色器運行Shader腳本實現圖像處理,雖然將濾鏡的一些處理交給GPU來執行,極大的減少了速度,但YUV-RGB過程卻拖了后腿。而Camera的幀數據卻只能為NV21或者YV21的,不在OpenGLES貼圖數據格式的支持范圍。雖然我們可以將NV21、YV12的數據轉換成RGBA的。
Android的視頻編輯器,包括了視頻錄制、剪切、增加bgm、美白、加濾鏡、加水印等多種功能- https://github.com/qqchenjian318/VideoEditor-For-Android
A prototype of camer live filter- https://github.com/fortdam/t_rtf_camera
ANDROID 高性能圖形處理 之RenderScript- http://tangzm.com/blog/?p=18
濾鏡相機MagicCamera- https://github.com/a483210/MagicCamera-ImageReader?
40余種實時濾鏡相機,可拍照、錄像、圖片修改- https://github.com/wuhaoyu1990/MagicCamera
google MagicCamera采用的是錄制方案來自于grafika- https://github.com/google/grafika
Android gpuimage的預覽數據實時處理- https://github.com/CyberAgent/android-gpuimage
Android-Camera開發- http://blog.csdn.net/oShunz/article/category/5952777
Android平臺Camera實時濾鏡實現方法探討(十一)--實時美顏濾鏡- http://blog.csdn.net/oshunz/article/details/50536031
Android+JNI+OpenGL開發自己的美圖秀秀- http://blog.csdn.net/oshunz/article/details/50537631
Android系統將內置濾鏡功能- http://blog.csdn.net/real_myth/article/details/50925986
Android平臺Camera實時濾鏡實現方法探討(一)--JNI操作Bitmap- http://blog.csdn.net/oshunz/article/details/49862273
android Camera 中添加一種場景模式- http://blog.csdn.net/fulinwsuafcie/article/details/8833652
-- 人臉識別 OpenFace,opencv人像
https://cmusatyalab.github.io/openface/
http://blog.dlib.net/2014/02/dlib-186-released-make-your-own-object.html
http://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html
http://ydwen.github.io/papers/WenECCV16.pdf
OpenCV處理圖片能力 - http://blog.csdn.net/q4878802/article/category/6081078
OpenCV+JavaCV實現人臉識別- http://blog.csdn.net/q4878802/article/details/52488447
Android使用OpenCV實現「人臉檢測」和「人臉識別」- http://blog.csdn.net/q4878802/article/details/51841793
opencv實現人像優化- http://download.csdn.net/detail/u011630458/8754741
總結
以上是生活随笔為你收集整理的自定义相机Camera,相机/视频实时滤镜 - android的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的exe生成工具(exe4j)
- 下一篇: 微信/易信公共平台开发(二):自定义菜单