作者ab790815 (CheeseMoon)
看板AndroidDev
標題[問題] Java字串長度限制問題
時間Tue Apr 26 14:29:40 2016
各位前輩好
我最近想做一個android結合opencv的人臉偵測程式
我研究過opencv的facedetect.cpp範例
打算把它搬到android上執行
可是我遇到一個問題
在這個範例裡需要載入haarcascade_frontalface_alt.XML的人臉訓練結果
我把XML的內容存到String後用Log印出
發現不能完整顯示
只讀到4千多個字元就斷尾了
但是在TextView卻可以
而且用length檢驗字串長度也是完整的
這個XML的字串長度高達676709
我覺得是Java的String型別可能有長度限制的關係
簡單來說
我可以用TextView直接印出完整資料
但無法在程式裡運用這個字串的資料
想請問各位有沒有遇過類似狀況以及如何解決
我的開發環境是 Android Studio 2.0 + OpenCV4Android 3.0.0
可能有些人會說可以用JNI
但是我在Android Studio裡嘗試寫OpenCV的JNI一直失敗
最多只能在我的Android 4.0.3的實體手機能執行
模擬器或5.0的手機都不能跑
所以我才會想用純Java來寫
感謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.243.46
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1461652182.A.716.html
2F:→ FlowerYen: 簡單來說 就是log一次沒辦法印那麼多字元 04/26 17:01
原來是Log的問題
可是這個String似乎在程式裡也沒辦法使用欸
在OpenCV的人臉偵測範例裡要將人臉訓練結果以String的方式
載入到CascadeClassifier形態的變數
我做到這一步程式就會崩潰了
我有試過用比較短的XML匯入就沒事(隨便找一個跟OpenCV無關的XML)
當然結果是無法使用但程式不至於崩潰
可是用OpenCV提供的訓練結果就不行
所以我想說是不是XML匯入到String的時候資料是不完整的
因而導致程式崩潰
我有試過直接將XML的內容複製貼上到String裡
結果完全不能編譯
並且提示字串長度過長
不知到跟我的問題有沒有相關
※ 編輯: ab790815 (59.120.243.46), 04/27/2016 09:07:38
3F:→ FlowerYen: 丟進String後 有試過print該String的length()嗎 04/27 09:32
4F:→ FlowerYen: 如果長度只有6x萬的話 應該是沒有問題的 04/27 09:38
5F:→ FlowerYen: 不好意思,我沒注意看, 如果你是String str = 結果 04/27 09:55
6F:→ FlowerYen: constant string的長度是有限制的 (似乎是64K) 04/27 09:57
7F:→ FlowerYen: 你要不要換個方式讀取XML的結果 例如先存成文字檔 04/27 09:58
8F:→ FlowerYen: 或者是換個沒有長度限制的compiler 04/27 10:02
9F:→ ssccg: 用無關的XML沒問題,用正確(但長度不明)的字串會有錯誤 04/27 10:04
10F:→ ssccg: 不是該看錯誤內容? String長度理論上到Integer.MAX_VALUE 04/27 10:05
11F:→ ssccg: 你的長度在記憶體不過1M左右,根本沒有很長... 04/27 10:06
12F:→ ssccg: TextView裡面還不是同樣用字串去存的... 04/27 10:06
這樣看起來我似乎是搞錯方向了
應該是不String的問題
而是我應該要先了解OpenCV的CascadeClassifier該如何使用
可能是我給的字串內容是有誤的才導致崩潰
感謝兩位前輩指教
我再嘗試看看
※ 編輯: ab790815 (59.120.243.46), 04/27/2016 10:31:09
-------------------------------------------------------------------
我找到問題了
我真的是搞錯CascadeClassifier的用法了
要塞給CascadeClassifier是XML的路徑
而不是內容
※ 編輯: ab790815 (59.120.243.46), 04/27/2016 13:52:17