質問編集履歴

5

書式の改善

2020/02/17 11:27

投稿

isisisimylife
isisisimylife

スコア42

test CHANGED
File without changes
test CHANGED
@@ -2,25 +2,15 @@
2
2
 
3
3
 
4
4
 
5
- Android StudioでOpenCVを使って、手を認識させるプログラムをJava作ろうとしているのですが次のようなエラーを吐きます。
5
+ Android StudioでOpenCVを使って、手を認識させるプログラムをJava作ろうとしています。
6
6
 
7
- getDir()がなぜnullPointerException吐くわからないです
7
+ CascadeClassifier()の引数にres/raw配下にあるxmlファイルのパス取りたいですが、とり方がわからないです。次のように取ろうとしたのですが、取れませんでした。
8
-
9
- ### 発生している問題・エラーメッセージ
10
-
11
- エラーメッセージ
12
-
13
- ```
14
-
15
- 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
16
-
17
- ```
18
-
19
- ### 該当のソースコード
20
-
21
-
22
8
 
23
9
  ```java
10
+
11
+ public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener {
12
+
13
+ 〜(略)〜
24
14
 
25
15
  private File setupOpenPalmCascadeFile() {
26
16
 
@@ -94,6 +84,8 @@
94
84
 
95
85
  CascadeClassifier cascadeOpenParam = new CascadeClassifier(openpalmcascade.getAbsolutePath());
96
86
 
97
-
87
+ 〜(略)〜
98
88
 
99
89
  ```
90
+
91
+ ファイルのパスのとり方を教えて頂けるとありがたいです

4

追記

2020/02/17 11:27

投稿

isisisimylife
isisisimylife

スコア42

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

3

分布の修正

2020/02/15 10:45

投稿

isisisimylife
isisisimylife

スコア42

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  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
16
16
 
17
-
17
+ ```
18
18
 
19
19
  ### 該当のソースコード
20
20
 

2

文法の修正

2020/02/15 10:06

投稿

isisisimylife
isisisimylife

スコア42

test CHANGED
File without changes
test CHANGED
@@ -21,8 +21,6 @@
21
21
 
22
22
 
23
23
  ```java
24
-
25
-
26
24
 
27
25
  private File setupOpenPalmCascadeFile() {
28
26
 
@@ -98,6 +96,4 @@
98
96
 
99
97
 
100
98
 
101
-
102
-
103
99
  ```

1

変更依頼が来たため

2020/02/15 10:04

投稿

isisisimylife
isisisimylife

スコア42

test CHANGED
File without changes
test CHANGED
@@ -12,9 +12,7 @@
12
12
 
13
13
  ```
14
14
 
15
- OpenCV(4.1.0) Error: Assertion failed (!empty()) in detectMultiScale, file /build/master_pack-android/opencv/modules/objdetect/src/cascadedetect.cpp, line 1658
15
+ 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
16
-
17
- ```
18
16
 
19
17
 
20
18
 
@@ -22,16 +20,84 @@
22
20
 
23
21
 
24
22
 
25
- ```
23
+ ```java
26
-
27
- CascadeClassifier cascadeOpendParam = new CascadeClassifier("/home/taise/AndroidStudioProjects/Mecrn/app/src/main/java/com/example/taise/mecrn/palm.xml");
28
-
29
- ```
30
24
 
31
25
 
32
26
 
33
- ### 試したこと
27
+ private File setupOpenPalmCascadeFile() {
34
28
 
35
- res/rawにpalm.xml(カスケードファイル)を置いています。
29
+ File cascadeDir = getDir("raw", Context.MODE_PRIVATE);
36
30
 
31
+ File cascadeFile = null;
32
+
33
+ InputStream is = null;
34
+
35
+ FileOutputStream os = null;
36
+
37
+ try {
38
+
39
+ cascadeFile = new File(cascadeDir, "closed_frontal_palm.xml");
40
+
41
+ if (!cascadeFile.exists()) {
42
+
43
+ is = getResources().openRawResource(R.raw.closed_frontal_palm);
44
+
37
- Cascadefile()の引数にpalm.xml(ファイル名)を渡してみたりしました。
45
+ os = new FileOutputStream(cascadeFile);
46
+
47
+ byte[] buffer = new byte[4096];
48
+
49
+ int readLen = 0;
50
+
51
+ while ((readLen = is.read(buffer)) != -1) {
52
+
53
+ os.write(buffer, 0, readLen);
54
+
55
+ }
56
+
57
+ }
58
+
59
+ } catch (IOException e) {
60
+
61
+ return null;
62
+
63
+ } finally {
64
+
65
+ if (is != null) {
66
+
67
+ try {
68
+
69
+ is.close();
70
+
71
+ } catch (Exception e) {
72
+
73
+ }
74
+
75
+ }
76
+
77
+ if (os != null) {
78
+
79
+ try {
80
+
81
+ os.close();
82
+
83
+ } catch (Exception e) {
84
+
85
+ }
86
+
87
+ }
88
+
89
+ }
90
+
91
+ return cascadeFile;
92
+
93
+ }
94
+
95
+ File openpalmcascade = setupOpenPalmCascadeFile();
96
+
97
+ CascadeClassifier cascadeOpenParam = new CascadeClassifier(openpalmcascade.getAbsolutePath());
98
+
99
+
100
+
101
+
102
+
103
+ ```