如何控制安卓手機的相機進行拍照 ? |
缺席
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
我沒開發過手機程式, 現在想要寫一支手機程式, 控制安卓手機的相機
Delphi 的範例程式, 好像都是叫出手機內建的拍照介面程式來用, 但我想要自己弄一個介面, 不要用內建的 用 Java 的朋友告訴我, 可以透過 SurfaceView 來顯示相機鏡頭捕捉到的畫面 但我查不到 Delphi 有跟 SurfaceView 相關的指令或物件 Delphi 的範例裏面, 有一個可以使用 TCameraComponent, 然後在 onSampleBufferReady 事件中, 取得鏡頭的畫面顯示在 TImage 元件中 但這樣的做法, 顯示速率實在太慢了, 不適合 請問, 有網友知道如何寫出自己的拍照介面嗎 ? 請提點一下, 或給我一些關鍵字, 我可以自行搜尋, 謝謝 ! |
NolanLiao
一般會員 發表:17 回覆:30 積分:9 註冊:2014-03-01 發送簡訊給我 |
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
謝謝 ! 這個範例就是我上面提到的: 在 onSampleBufferReady 事件中, 取得鏡頭的畫面顯示在 TImage 元件中
但這樣的做法實在是慢到無法接受的地步 我需要等同或近似 SurfaceView 的顯示速率, 不然沒辦法拿去給客戶使用 ===================引 用 NolanLiao 文 章=================== FMX.CameraComponent Sample http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FMX.Mobile.CameraComponent_Sample |
NolanLiao
一般會員 發表:17 回覆:30 積分:9 註冊:2014-03-01 發送簡訊給我 |
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
謝謝 ! 這應該就是使用 CameraComponent 做出來的效果, 但顯示速率實在太慢了
我的手機是 Galaxy Note 第一代, 是很老舊的手機, 但內建的拍照單元, 顯示相機畫面卻很流暢, 顯然是直接透過 SurfaceView 來顯示的 Delphi 的 CameraComponent 把影像流, 丟到 TImage 去顯示, 速率快不起來 SurfaceView 才是正確的做法, 不知 Delphi 要如何才能調用 SurfaceView ? Google 半天都找不到資料 ===================引 用 NolanLiao 文 章=================== 給您一個我用 Delphi 10 Seattle 寫 APK 檔案,試試看是否可以達到您要的效果. CameraView.apk 下載位置: https://www.dropbox.com/s/yd2kz5t5f2a05l8/CameraView.apk?dl=0 |
NolanLiao
一般會員 發表:17 回覆:30 積分:9 註冊:2014-03-01 發送簡訊給我 |
|
NolanLiao
一般會員 發表:17 回覆:30 積分:9 註冊:2014-03-01 發送簡訊給我 |
RAD Studio 10 Seattle 相機鏡頭預覽效能測試
http://nolanliao1965.pixnet.net/blog/post/309017205 手機環境:Android 5.0.1 三星手機 S4 開發環境:Embarcadero Delphi 10 Seattle Version 23.0.20618.2753 作業系統:Windows 10 專業版 (64 位元) 有同好在 KTop 論壇貼文反映 RAD Studio 10 Seattle 相機鏡頭預覽效能 不佳,特別寫一個小小測試程式,以供同好測試鏡頭預覽效能,看看同好 是否發生類似情況,如果有延遲或預覽效能不彰,請同好告知裝置廠牌型 號及作業系統版本,感謝測試,謝謝。 測試程式步驟: (1)進入測試程式後,點選『相機預覽』按鈕。 (2)進入『相機預覽』頁面後,左右移動測試裝置,觀看『鏡頭預覽』效 能。 (3)點選『打勾』按鈕,進行『鏡頭預覽』儲存動作(備註:僅將預覽圖檔 存至下個頁面中,不會儲存至測試裝置內),或是點選『打叉』按鈕, 返回『相機預覽』按鈕頁面。 (4)進入『拍照相片』頁面,可點選測試裝置『實體返回』按鈕,返回『 相機預覽』按鈕頁面。 (5)在『相機預覽』按鈕頁面,可連續點選兩次『實體返回』按鈕,退出 測試程式。 程式 CameraView.apk 下載位置: https://www.dropbox.com/s/yd2kz5t5f2a05l8/CameraView.apk?dl=0 |
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
摸索了幾天, 結論是:
Delphi 提供兩種拍照的方法, 一是 TTakePhotoFromCameraAction , 這是直接叫出手機內建的照相元件程式, 顯示速率當然很快 另一種方法是使用 TCameraComponent , 這方法是不斷取得相機鏡頭的畫面, 然後自行顯示在 TImage 或其他元件內, 顯示速率超慢 除了這兩種方法, Delphi 沒有其他相機相關的元件了 因此, 要達成我的目的, 應該只剩直接調用 Java 物件的途徑了, 我完全沒接觸過這個課題, 如果網友有調用 Java 的 SurfaceView 及 Camera 等等物件的經驗, 敬請不吝指導一二, 謝謝 ! |
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
我在設法用 Delphi 調用 Java 的 Camera 物件來使用, 我從以下的網址抓了一堆的 Java 物件的 Delphi 宣告檔 :
https://github.com/FMXExpress/android-object-pascal-wrapper 並處理了 circular reference 的問題, 終於可以 use 這些 Java 元件, 並 compile 成功 原以為勝券在握, 想不到在執行時, 要 Create 這些物件, 卻發生了 class Segmentation fault 的錯誤 我宣告了一個 Camera : JCamera; 元件 以 Camera:=TJCamera.JavaClass.open; 指令打算建立這個物件的實例, 卻無法成功( class Segmentation fault ), 實在不知該怎麼樣 Create 這個物件 ? 我看在別人寫的 Java 的程式中, 只要執行 camera = Camera.open(); 就可以建立這個物件, 為什麼 Delphi 中不行 ? 是不是還有其他的步驟 ? 懇請網友協助, 幫忙找出問題 專案程式碼在此 http://robowang.net/NativeCamera.rar , 方便測試, 謝謝 ! |
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
|
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
|
NolanLiao
一般會員 發表:17 回覆:30 積分:9 註冊:2014-03-01 發送簡訊給我 |
|
kuraki5336
初階會員 發表:13 回覆:35 積分:34 註冊:2010-06-09 發送簡訊給我 |
說實在的,從影片看起來就是很卡 ..... 開啟原生的相機速度快了他大概一百倍不只。
剛好最近再用Zxing也在想為什麼這麼不順。 https://github.com/Spelt/ZXing.Delphi 這是Zxing裡面的其中一個範例 FmxAdvancedTestApp 可能多少有點幫助哦 他去調整了fps的顯示就變順了 ===================引 用 NolanLiao 文 章=================== RAD Studio 10 Seattle - Delphi 相機預覽功能 相機預覽功能,預覽影像不延遲不卡卡,提供 APK 下載,歡迎同好下載測試。 YouTube 操作示範相機預覽功能: https://www.youtube.com/watch?v=O4N0uXTA2ZY CameraView.apk『DropBox』檔案下載: https://www.dropbox.com/s/m5lgntccgxg6dd8/CameraView.apk?dl=0
編輯記錄
kuraki5336 重新編輯於 2018-06-18 16:50:47, 註解 無‧
|
NolanLiao
一般會員 發表:17 回覆:30 積分:9 註冊:2014-03-01 發送簡訊給我 |
這裡有『安卓手機相機』操作『條碼掃描』示範影片可以參考,有興趣測試可至下列網址下載程式,
詳細操作步驟請參考示範影片內容,謝謝。 測試帳號:DelphiKtop 帳號密碼:1234 操作步驟: (1)輸入『帳號』及 『密碼』登入系統。 (2)進入『主功能表』點選『右下方按鍵(六格白色圖示)』進入『次功能表』畫面。 (3)點選『送貨記錄回傳』功能。 (4)在點選『QRCode 條碼(黑白圖示)』就可進入『相機』預覽畫面。 Delphi 10.2.3 Tokyo 示範 ERP 整合 QRCode 條碼掃描 程式操作 https://www.youtube.com/watch?v=k3K12qagez0 示範 ERP 系統 - Google Play 應用程式 https://play.google.com/store/apps/details?id=com.NolanLiao1965.WanXinErpApp |
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
不曉得這篇能不能解決你的問題
https://stackoverflow.com/questions/36641628/android-camera-access-from-delphi ===================引 用 boson 文 章=================== 無法解決 我可以用 Delphi 建立 Camera , 可以建立 SurfaceView, 但不知道要怎麼樣讓 SurfaceView 顯示在 Delphi 的元件上 後來我放棄了
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心 |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
我也是用 zxing 的範例做出內建掃碼工具, 是使用 TCameraCompoment 提供的元件, 確實掃瞄速度不能接受(QR大概要0.2-0.5秒, 在 Android狀況還好, 在 ios 太概對個5組就會閃退走人了, 而1維的則是慘不忍睹, 基本要0.5至1.5秒一組), 即便調整 fps 也好不到那裡去(原作是4張擷取一張來判斷), NonameLiao的資訊也拜讀過, 好像掃瞄效果不錯, 而且還可以指定區域掃瞄, 不過單看影片好像有點隔靴騷癢, 目前也是處理擱置狀態, 如果其他前輩能提供完整範例, 那真的是"功德"一件, 給我們滿滿的大平台~~
|
boson
中階會員 發表:74 回覆:155 積分:85 註冊:2004-07-31 發送簡訊給我 |
|
kuraki5336
初階會員 發表:13 回覆:35 積分:34 註冊:2010-06-09 發送簡訊給我 |
影片參考
https://drive.google.com/file/d/1WoL-DDAC3gay6j-b3irCDDy8ZxawbOsK/view?usp=sharing 原始碼下載 https://drive.google.com/file/d/15JQJc--k2Yq-6NAPCXdCUYahtQV73k9n/view?usp=sharing ===================引 用 P.D. 文 章=================== 我也是用 zxing 的範例做出內建掃碼工具, 是使用 TCameraCompoment 提供的元件, 確實掃瞄速度不能接受(QR大概要0.2-0.5秒, 在 Android狀況還好, 在 ios 太概對個5組就會閃退走人了, 而1維的則是慘不忍睹, 基本要0.5至1.5秒一組), 即便調整 fps 也好不到那裡去(原作是4張擷取一張來判斷), NonameLiao的資訊也拜讀過, 好像掃瞄效果不錯, 而且還可以指定區域掃瞄, 不過單看影片好像有點隔靴騷癢, 目前也是處理擱置狀態, 如果其他前輩能提供完整範例, 那真的是"功德"一件, 給我們滿滿的大平台~~ |
kuraki5336
初階會員 發表:13 回覆:35 積分:34 註冊:2010-06-09 發送簡訊給我 |
覺得相機的鏡頭 他在對焦上會著重在某個點
像要一瞬間能掃一堆條碼的 可以換~~~~RFID條碼 誤.... #1 區域不固定 試著把接收段的改寫一下應該是能完成這樣的動作 ... 她得到了條碼之後會在RECT上畫圖 , 這個動作可以將其取消,直接得到結果之後將條碼記錄到陣列 下一秒再讓他繼續自動偵測 忽略之前掃過的。但這樣會延長掃的時間。 #2 區域固定 先抓左圖在抓右圖~結果一次出來 以前有看過電子發票一次掃兩顆的,再想他應該也是這樣做吧@@.... ===================引 用 boson 文 章=================== 我看到上文的介紹, 抓了 ZXing.Delphi 來試用, 發現還蠻好用的 但是, 它似乎一次只能辨識一個條碼, 而我的需求則是 : 一張圖片中, 包含有數個條碼(可能有一維的39碼, 跟二維的 QR 碼, 同時存在, 且個數不定), 需要同時被辨識出來 不知道幾位使用過 ZXing.Delphi 的前輩, 我的需求可以用 ZXing.Delphi 達成嗎 ? |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
感謝K的分享, 我下載後把原先已寫好的換成這組, 果然所有lag的問題都解決了, 而且掃瞄的速度也比以往快了了, 在 Android 1D, 只要相機對焦系統好, 0.05-0.1秒就能達成, 但 QRcode 比較不穩定, 在 3*3cm的QRCode, 0.2秒可辨識出, 但如果小於 2cm 的大小, 手機對焦就差了(我測試的是SamSung A8+), 反而是 !D 條碼表現更好, 而且閃退機率也大幅降低至少6成以上
不過這套系統有幾個個問題 如果是使用 XE 10.1(Berlin), 因為原作改了 FMX.Media.Android 內容(不知改了那裡, 因為沒有標識, 所以是把原作整個改過的拿來用), 在 10.1 版本有1個function是不存在 build的時候會出錯, function QueryInterface not in base define, 查 10.1版的 fmx 並沒有這組define, 在 10.2(Tokyo) 就可以buind成功, 所以我把 10.1的 QueryInterface 給 mark 起來, 成功編譯app, run起來好像也沒差 第2個問題我還沒試, 就是在 ios 上不知道能否也具備這個高效能的表現(不過看起來好像不太可能), 如果在 ios 也行的, 就更好了, 如果還能做出selection 掃瞄區就太完美啦, 目前看來還是以鏡頭能攝入的全景為主, 其實我只要針對條碼區塊能進行拍攝, 應該還可以更減少一個資源的消耗 第3個問題是, 當我掃瞄非條碼時(如文字), 竟然也能辨識出一些文數字出來, 實在令人訝異, 或許不是影像的問題, 而是解譯程式(zxing)的關係, 但還沒使用之前, 是沒有發生這個問題, 因為我有設計只要掃出 result <> '' 就自動執行指定的功能, 但希望是掃瞄到不是條碼時, 不要辨出任何結果, 由於現在掃碼速度加快, 所以不知道是不是這樣而發生誤判 第4個問題是我擔心, 如果未來embd 出了 10.3, 會不會針對 fmx.media.android 又改了什麼, 導致舊版又升不上來, 這是我現在最怕的, 因為由xe4開始到 xe10, 不斷的在改變框架及規則, 讓我的程式每換一個版本就死在路上 不過不管如何, 分享的東東, 激推~~ |
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
你把它包成jar檔,在delphi就可以呼叫它了。
===================引 用 boson 文 章=================== 我在設法用 Delphi 調用 Java 的 Camera 物件來使用, 我從以下的網址抓了一堆的 Java 物件的 Delphi 宣告檔 : https://github.com/FMXExpress/android-object-pascal-wrapper 並處理了 circular reference 的問題, 終於可以 use 這些 Java 元件, 並 compile 成功 原以為勝券在握, 想不到在執行時, 要 Create 這些物件, 卻發生了 class Segmentation fault 的錯誤 我宣告了一個 Camera : JCamera; 元件 以 Camera:=TJCamera.JavaClass.open; 指令打算建立這個物件的實例, 卻無法成功( class Segmentation fault ), 實在不知該怎麼樣 Create 這個物件 ? 我看在別人寫的 Java 的程式中, 只要執行 camera = Camera.open(); 就可以建立這個物件, 為什麼 Delphi 中不行 ? 是不是還有其他的步驟 ? 懇請網友協助, 幫忙找出問題 專案程式碼在此 http://robowang.net/NativeCamera.rar , 方便測試, 謝謝 ! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |