Android StudioでOCRを使ったアプリを作ろうとしています。
OCRでとってきた文字列の一部分だけ抽出してリストや変数に入れていましたが、突然タイトルのエラーが出てアプリを停止するようになりました。
一応調べましたが、どこを直せばよいかわからず詰まっています。
どなたかご教授お願いします。
java
1private static String convertResponseToString(BatchAnnotateImagesResponse response) { 2 StringBuilder message = new StringBuilder("I found these things:\n\n"); 3 4 TextAnnotation label = response.getResponses().get(0).getFullTextAnnotation(); 5 String str = null; 6 str = label.getText(); 7 8 String matchdate = null; 9 String regaxdate = null; 10 String regaxprice = null; 11 ArrayList<String> priceList = new ArrayList<>(); 12 ArrayList<String> goodsList = new ArrayList<>(); 13 14 //日付取得の処理 15 regaxdate = "\d{4}-\d{1,2}-\d{1,2}|\d{4}/\d{1,2}/\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日"; 16 Pattern pdate = Pattern.compile(regaxdate); 17 Matcher mdate = pdate.matcher(str); 18 if (mdate.find()) { 19 matchdate = mdate.group(); 20 } 21 22 //値段取得の処理 23 regaxprice = "¥([,0-9]+)"; 24 Pattern pprice = Pattern.compile(regaxprice); 25 Matcher mprice = pprice.matcher(str); 26 while(mprice.find()) { 27 priceList.add(mprice.group()); 28 } 29 30 //品名取得の処理 31// String regaxdate_ = "\d{4}-\d{1,2}-\d{1,2}|\d{4}/\d{1,2}/\d{1,2}|\d{4}年\d{1,2}月\d{1,2}日"; 32// Pattern pdatenohou = Pattern.compile(regaxdate_); 33// Matcher mdatenohou = pdatenohou.matcher(str); //日付マッチ 34// String regaxkei = ".*小計.*"; 35// Pattern pkei = Pattern.compile(regaxkei); 36// Matcher mkeinohou = pkei.matcher(str); //計マッチ 37// 38// if(mkeinohou.find()) { 39// message.append("ああああああ"); 40// } 41// String matchdatehinmei = mdate.group(); 42// int firstidx = str.indexOf(matchdatehinmei) + matchdatehinmei.length(); 43// String matchkeihinmei = mkeinohou.group(); 44// int lastidx = str.indexOf(matchkeihinmei); 45 46// message.append(str.substring(firstidx, lastidx)); 47 48 if (str != null) { 49 message.append("" + 50 "文字認識できてます。" + "\n"); 51 if(matchdate != null) { 52 message.append(matchdate + "\n"); 53 } else { 54 message.append("日付マッチしませんでした。" + "\n"); 55 } 56 if(priceList!= null) { 57 while (priceList.isEmpty() == false) { 58 for (int i = 0; i < priceList.size() - 1; i++) { 59 message.append(priceList.get(i) + "\n"); 60 } 61 } 62 } else { 63 message.append("価格マッチしませんでした。" + "\n"); 64 } 65 } else { 66 message.append("認識されませんでした。" + "\n"); 67 } 68 return message.toString(); 69 70 } 71}
2018-12-12 14:07:48.096 27699-27934/com.google.sample.cloudvision E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.google.sample.cloudvision, PID: 27699 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:353) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) Caused by: java.lang.OutOfMemoryError: Failed to allocate a 171966472 byte allocation with 25165824 free bytes and 108MB until OOM, max allowed footprint 112880952, growth limit 201326592 at java.util.Arrays.copyOf(Arrays.java:3260) at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:125) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:451) at java.lang.StringBuilder.append(StringBuilder.java:137) at com.google.sample.cloudvision.MainActivity.convertResponseToString(MainActivity.java:395) at com.google.sample.cloudvision.MainActivity.access$100(MainActivity.java:77) at com.google.sample.cloudvision.MainActivity$LableDetectionTask.doInBackground(MainActivity.java:283) at com.google.sample.cloudvision.MainActivity$LableDetectionTask.doInBackground(MainActivity.java:269) at android.os.AsyncTask$2.call(AsyncTask.java:333) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) --------- beginning of system
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/12 05:59