質問するログイン新規登録

質問編集履歴

5

書式の改善

2020/02/17 11:27

投稿

isisisimylife
isisisimylife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -1,15 +1,10 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- Android StudioでOpenCVを使って、手を認識させるプログラムをJava作ろうとしているのですが次のようなエラーを吐きます。
3
+ Android StudioでOpenCVを使って、手を認識させるプログラムをJava作ろうとしています。
4
- getDir()がなぜnullPointerException吐くわからないです
4
+ CascadeClassifier()の引数にres/raw配下にあるxmlファイルのパス取りたいですが、とり方がわからないです。次のように取ろうとしたのですが、取れませんでした。
5
- ### 発生している問題・エラーメッセージ
6
- エラーメッセージ
7
- ```
8
- Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDir(java.lang.String, int)' on a null object reference
9
- ```
10
- ### 該当のソースコード
11
-
12
5
  ```java
6
+ public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener {
7
+ 〜(略)〜
13
8
  private File setupOpenPalmCascadeFile() {
14
9
  File cascadeDir = getDir("raw", Context.MODE_PRIVATE);
15
10
  File cascadeFile = null;
@@ -46,5 +41,6 @@
46
41
  }
47
42
  File openpalmcascade = setupOpenPalmCascadeFile();
48
43
  CascadeClassifier cascadeOpenParam = new CascadeClassifier(openpalmcascade.getAbsolutePath());
49
-
44
+ 〜(略)〜
50
- ```
45
+ ```
46
+ ファイルのパスのとり方を教えて頂けるとありがたいです

4

追記

2020/02/17 11:27

投稿

isisisimylife
isisisimylife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  Android StudioでOpenCVを使って、手を認識させるプログラムをJava作ろうとしているのですが次のようなエラーを吐きます。
4
-
4
+ getDir()がなぜnullPointerExceptionを吐くのかわからないです
5
5
  ### 発生している問題・エラーメッセージ
6
6
  エラーメッセージ
7
7
  ```

3

分布の修正

2020/02/15 10:45

投稿

isisisimylife
isisisimylife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -6,7 +6,7 @@
6
6
  エラーメッセージ
7
7
  ```
8
8
  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDir(java.lang.String, int)' on a null object reference
9
-
9
+ ```
10
10
  ### 該当のソースコード
11
11
 
12
12
  ```java

2

文法の修正

2020/02/15 10:06

投稿

isisisimylife
isisisimylife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -10,7 +10,6 @@
10
10
  ### 該当のソースコード
11
11
 
12
12
  ```java
13
-
14
13
  private File setupOpenPalmCascadeFile() {
15
14
  File cascadeDir = getDir("raw", Context.MODE_PRIVATE);
16
15
  File cascadeFile = null;
@@ -48,5 +47,4 @@
48
47
  File openpalmcascade = setupOpenPalmCascadeFile();
49
48
  CascadeClassifier cascadeOpenParam = new CascadeClassifier(openpalmcascade.getAbsolutePath());
50
49
 
51
-
52
50
  ```

1

変更依頼が来たため

2020/02/15 10:04

投稿

isisisimylife
isisisimylife

スコア42

title CHANGED
File without changes
body CHANGED
@@ -5,15 +5,48 @@
5
5
  ### 発生している問題・エラーメッセージ
6
6
  エラーメッセージ
7
7
  ```
8
- OpenCV(4.1.0) Error: Assertion failed (!empty()) in detectMultiScale, file /build/master_pack-android/opencv/modules/objdetect/src/cascadedetect.cpp, line 1658
8
+ Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDir(java.lang.String, int)' on a null object reference
9
- ```
10
9
 
11
10
  ### 該当のソースコード
12
11
 
13
- ```
12
+ ```java
14
- CascadeClassifier cascadeOpendParam = new CascadeClassifier("/home/taise/AndroidStudioProjects/Mecrn/app/src/main/java/com/example/taise/mecrn/palm.xml");
15
- ```
16
13
 
17
- ### 試したこと
18
- res/rawにpalm.xml(カスケードファイル)を置いています。
19
- Cascadefile()の引数にpalm.xml(ファイル名)を渡してみたりしました。
14
+ private File setupOpenPalmCascadeFile() {
15
+ File cascadeDir = getDir("raw", Context.MODE_PRIVATE);
16
+ File cascadeFile = null;
17
+ InputStream is = null;
18
+ FileOutputStream os = null;
19
+ try {
20
+ cascadeFile = new File(cascadeDir, "closed_frontal_palm.xml");
21
+ if (!cascadeFile.exists()) {
22
+ is = getResources().openRawResource(R.raw.closed_frontal_palm);
23
+ os = new FileOutputStream(cascadeFile);
24
+ byte[] buffer = new byte[4096];
25
+ int readLen = 0;
26
+ while ((readLen = is.read(buffer)) != -1) {
27
+ os.write(buffer, 0, readLen);
28
+ }
29
+ }
30
+ } catch (IOException e) {
31
+ return null;
32
+ } finally {
33
+ if (is != null) {
34
+ try {
35
+ is.close();
36
+ } catch (Exception e) {
37
+ }
38
+ }
39
+ if (os != null) {
40
+ try {
41
+ os.close();
42
+ } catch (Exception e) {
43
+ }
44
+ }
45
+ }
46
+ return cascadeFile;
47
+ }
48
+ File openpalmcascade = setupOpenPalmCascadeFile();
49
+ CascadeClassifier cascadeOpenParam = new CascadeClassifier(openpalmcascade.getAbsolutePath());
50
+
51
+
52
+ ```