線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4622
推到 Plurk!
推到 Facebook!

如何控制安卓手機的相機進行拍照 ?

缺席
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-10-23 17:36:13 IP:118.163.xxx.xxx 訂閱
我沒開發過手機程式, 現在想要寫一支手機程式, 控制安卓手機的相機

Delphi 的範例程式, 好像都是叫出手機內建的拍照介面程式來用, 但我想要自己弄一個介面, 不要用內建的
用 Java 的朋友告訴我, 可以透過 SurfaceView 來顯示相機鏡頭捕捉到的畫面
但我查不到 Delphi 有跟 SurfaceView 相關的指令或物件

Delphi 的範例裏面, 有一個可以使用 TCameraComponent, 然後在 onSampleBufferReady 事件中, 取得鏡頭的畫面顯示在 TImage 元件中
但這樣的做法, 顯示速率實在太慢了, 不適合

請問, 有網友知道如何寫出自己的拍照介面嗎 ?
請提點一下, 或給我一些關鍵字, 我可以自行搜尋, 謝謝 !
NolanLiao
一般會員


發表:17
回覆:30
積分:9
註冊:2014-03-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-10-23 23:37:08 IP:60.250.xxx.xxx 訂閱
FMX.CameraComponent Sample
http://docwiki.embarcadero.com/CodeExamples/Seattle/en/FMX.Mobile.CameraComponent_Sample
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-10-24 00:09:13 IP:118.163.xxx.xxx 訂閱
謝謝 ! 這個範例就是我上面提到的: 在 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2015-10-24 23:48:49 IP:60.250.xxx.xxx 訂閱
給您一個我用 Delphi 10 Seattle 寫 APK 檔案,試試看是否可以達到您要的效果.
CameraView.apk 下載位置:
https://www.dropbox.com/s/yd2kz5t5f2a05l8/CameraView.apk?dl=0
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2015-10-25 00:57:33 IP:36.235.xxx.xxx 訂閱
謝謝 ! 這應該就是使用 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2015-10-25 12:03:15 IP:60.250.xxx.xxx 訂閱
強烈建議您試試,,附上程式截圖讓您先看看,可以達到您要的效果.的.
使用 三星 S4 手機測試,.

程式截圖 下載位置:
https://www.dropbox.com/s/oqp3mqfzo62ov14/Capture_20151025.png?dl=0

CameraView.apk 下載位置:
https://www.dropbox.com/s/yd2kz5t5f2a05l8/CameraView.apk?dl=0
NolanLiao
一般會員


發表:17
回覆:30
積分:9
註冊:2014-03-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2015-10-25 15:31:10 IP:60.250.xxx.xxx 訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2015-10-25 21:42:27 IP:36.235.xxx.xxx 訂閱
多謝 !
我是有實際下載使用, 但在 Galaxy Note 第一代的手機上, 顯示速率實在慢到不行
換用 Galaxy Note 4 手機, 快了些, 但還是很不流暢, 比起手機內建的拍照單元, 還是慢得多了
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-10-27 07:58:11 IP:36.235.xxx.xxx 訂閱
摸索了幾天, 結論是:
Delphi 提供兩種拍照的方法, 一是 TTakePhotoFromCameraAction , 這是直接叫出手機內建的照相元件程式, 顯示速率當然很快
另一種方法是使用 TCameraComponent , 這方法是不斷取得相機鏡頭的畫面, 然後自行顯示在 TImage 或其他元件內, 顯示速率超慢

除了這兩種方法, Delphi 沒有其他相機相關的元件了
因此, 要達成我的目的, 應該只剩直接調用 Java 物件的途徑了,
我完全沒接觸過這個課題, 如果網友有調用 Java 的 SurfaceView 及 Camera 等等物件的經驗, 敬請不吝指導一二, 謝謝 !
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#10 引用回覆 回覆 發表時間:2015-10-28 16:02:55 IP:1.165.xxx.xxx 訂閱
我在設法用 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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2015-12-31 14:32:14 IP:49.82.xxx.xxx 訂閱
请问解决了吗?我也在弄摄像头
------
The empty vessels make the greatest sound.
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#12 引用回覆 回覆 發表時間:2015-12-31 14:44:27 IP:1.165.xxx.xxx 訂閱
無法解決

我可以用 Delphi 建立 Camera , 可以建立 SurfaceView, 但不知道要怎麼樣讓 SurfaceView 顯示在 Delphi 的元件上
後來我放棄了
allen-86
一般會員


發表:28
回覆:44
積分:19
註冊:2008-02-01

發送簡訊給我
#13 引用回覆 回覆 發表時間:2016-01-02 07:47:23 IP:49.82.xxx.xxx 訂閱
我用官方的demo,发现也不行,速度太卡
------
The empty vessels make the greatest sound.
NolanLiao
一般會員


發表:17
回覆:30
積分:9
註冊:2014-03-01

發送簡訊給我
#14 引用回覆 回覆 發表時間:2016-01-03 16:13:09 IP:60.250.xxx.xxx 訂閱
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
初階會員


發表:13
回覆:35
積分:34
註冊:2010-06-09

發送簡訊給我
#15 引用回覆 回覆 發表時間:2018-06-18 16:00:32 IP:114.38.xxx.xxx 未訂閱
說實在的,從影片看起來就是很卡 ..... 開啟原生的相機速度快了他大概一百倍不只。

剛好最近再用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

發送簡訊給我
#16 引用回覆 回覆 發表時間:2018-06-19 10:45:00 IP:60.250.xxx.xxx 訂閱
這裡有『安卓手機相機』操作『條碼掃描』示範影片可以參考,有興趣測試可至下列網址下載程式,
詳細操作步驟請參考示範影片內容,謝謝。

測試帳號: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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2018-06-19 13:01:20 IP:125.227.xxx.xxx 未訂閱
不曉得這篇能不能解決你的問題

https://stackoverflow.com/questions/36641628/android-camera-access-from-delphi

===================引 用 boson 文 章===================
無法解決

我可以用 Delphi 建立 Camera , 可以建立 SurfaceView, 但不知道要怎麼樣讓 SurfaceView 顯示在 Delphi 的元件上
後來我放棄了
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#18 引用回覆 回覆 發表時間:2018-06-22 15:16:25 IP:59.120.xxx.xxx 未訂閱
我也是用 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

發送簡訊給我
#19 引用回覆 回覆 發表時間:2018-06-26 15:30:50 IP:59.126.xxx.xxx 訂閱
我看到上文的介紹, 抓了 ZXing.Delphi 來試用, 發現還蠻好用的
但是, 它似乎一次只能辨識一個條碼, 而我的需求則是 :
一張圖片中, 包含有數個條碼(可能有一維的39碼, 跟二維的 QR 碼, 同時存在, 且個數不定), 需要同時被辨識出來
不知道幾位使用過 ZXing.Delphi 的前輩, 我的需求可以用 ZXing.Delphi 達成嗎 ?

kuraki5336
初階會員


發表:13
回覆:35
積分:34
註冊:2010-06-09

發送簡訊給我
#20 引用回覆 回覆 發表時間:2018-07-01 01:34:05 IP:114.38.xxx.xxx 未訂閱
影片參考
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

發送簡訊給我
#21 引用回覆 回覆 發表時間:2018-07-01 01:43:12 IP:114.38.xxx.xxx 未訂閱
覺得相機的鏡頭 他在對焦上會著重在某個點

像要一瞬間能掃一堆條碼的 可以換~~~~RFID條碼 誤....


#1 區域不固定
試著把接收段的改寫一下應該是能完成這樣的動作 ...
她得到了條碼之後會在RECT上畫圖 , 這個動作可以將其取消,直接得到結果之後將條碼記錄到陣列
下一秒再讓他繼續自動偵測 忽略之前掃過的。但這樣會延長掃的時間。

#2 區域固定
先抓左圖在抓右圖~結果一次出來
以前有看過電子發票一次掃兩顆的,再想他應該也是這樣做吧@@....


===================引 用 boson 文 章===================
我看到上文的介紹, 抓了 ZXing.Delphi 來試用, 發現還蠻好用的
但是, 它似乎一次只能辨識一個條碼, 而我的需求則是 :
一張圖片中, 包含有數個條碼(可能有一維的39碼, 跟二維的 QR 碼, 同時存在, 且個數不定), 需要同時被辨識出來
不知道幾位使用過 ZXing.Delphi 的前輩, 我的需求可以用 ZXing.Delphi 達成嗎 ?

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#22 引用回覆 回覆 發表時間:2018-07-05 02:32:34 IP:118.169.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#23 引用回覆 回覆 發表時間:2018-07-27 05:02:33 IP:60.54.xxx.xxx 未訂閱
你把它包成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 , 方便測試, 謝謝 !
系統時間:2024-04-26 13:53:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!