看板 AndroidDev 關於我們 聯絡資訊
各位前輩好 我最近想做一個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://www.ptt.cc/bbs/AndroidDev/M.1461652182.A.716.html
FlowerYen: 請參考此篇文章 http://stackoverflow.com/a/8899735 04/26 16:53
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
FlowerYen: 丟進String後 有試過print該String的length()嗎 04/27 09:32
FlowerYen: 如果長度只有6x萬的話 應該是沒有問題的 04/27 09:38
FlowerYen: 不好意思,我沒注意看, 如果你是String str = 結果 04/27 09:55
FlowerYen: constant string的長度是有限制的 (似乎是64K) 04/27 09:57
FlowerYen: 你要不要換個方式讀取XML的結果 例如先存成文字檔 04/27 09:58
FlowerYen: 或者是換個沒有長度限制的compiler 04/27 10:02
ssccg: 用無關的XML沒問題,用正確(但長度不明)的字串會有錯誤 04/27 10:04
ssccg: 不是該看錯誤內容? String長度理論上到Integer.MAX_VALUE 04/27 10:05
ssccg: 你的長度在記憶體不過1M左右,根本沒有很長... 04/27 10:06
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