6969import javax .microedition .khronos .opengles .GL10 ;
7070
7171import static openscience .crowdsource .video .experiments .AppConfigService .COMMAND_CHMOD_744 ;
72+ import static openscience .crowdsource .video .experiments .AppConfigService .DATA_LOCAL_TMP_VIENNACL_CACHE ;
7273import static openscience .crowdsource .video .experiments .AppConfigService .cachedScenariosFilePath ;
7374import static openscience .crowdsource .video .experiments .AppConfigService .externalSDCardOpensciencePath ;
7475import static openscience .crowdsource .video .experiments .AppConfigService .externalSDCardOpenscienceTmpPath ;
7576import static openscience .crowdsource .video .experiments .AppConfigService .externalSDCardPath ;
7677import static openscience .crowdsource .video .experiments .AppConfigService .initAppConfig ;
78+ import static openscience .crowdsource .video .experiments .AppConfigService .parsePredictionRawResult ;
7779import static openscience .crowdsource .video .experiments .AppConfigService .url_cserver ;
7880import static openscience .crowdsource .video .experiments .RecognitionScenarioService .PRELOADING_TEXT ;
7981import static openscience .crowdsource .video .experiments .Utils .createDirIfNotExist ;
@@ -926,9 +928,17 @@ public void println(String text) {
926928
927929 String scenarioCmd = meta .getString ("cmd" );
928930
931+ //patrh open cl version
932+ String openCLlibPath = null ;
933+ // openCLlibPath = patchOpenCL(); temporary disabled
934+
935+ if (openCLlibPath != null ) {
936+ libPath = libPath + ":" + openCLlibPath ;
937+ }
929938 String [] scenarioEnv = {
930939 "CT_REPEAT_MAIN=" + String .valueOf (1 ),
931940 "LD_LIBRARY_PATH=" + libPath + ":$LD_LIBRARY_PATH" ,
941+ "VIENNACL_CACHE_PATH=" + DATA_LOCAL_TMP_VIENNACL_CACHE
932942 };
933943 publishProgress ("Prepared scenario env " + scenarioEnv [0 ]);
934944 publishProgress ("Prepared scenario env " + scenarioEnv [1 ]);
@@ -962,7 +972,8 @@ public void run() {
962972 List <Long > processingTimes = new LinkedList <>();
963973 List <List <Double []>> cpuFreqs = new LinkedList <>();
964974 JSONArray fineGrainTimerJSONArray = new JSONArray ();
965- String recognitionResultText = null ;
975+ String recognitionRawResultText = null ;
976+ String predictions = null ;
966977 for (int it = 0 ; it <= iterationNum ; it ++) {
967978 if (it == 0 ) {
968979 publishProgress ("Recognition in progress (the device is warming up) ...\n " );
@@ -972,8 +983,8 @@ public void run() {
972983 long startTime = System .currentTimeMillis ();
973984 String [] recognitionResult = openme .openme_run_program (scenarioCmd , scenarioEnv , executablePath ); //todo fix ck response cmd value: addRecognitionScenario appropriate path to executable from according to path value at "file" json
974985 Long processingTime = System .currentTimeMillis () - startTime ;
975- recognitionResultText = recognitionResult [1 ]; // todo it better to compare recognition results and print error
976- if (recognitionResultText == null || recognitionResultText .trim ().equals ("" )) {
986+ recognitionRawResultText = recognitionResult [1 ]; // todo it better to compare recognition results and print error
987+ if (recognitionRawResultText == null || recognitionRawResultText .trim ().equals ("" )) {
977988 publishProgress ("\n Error Recognition result is empty ...\n " );
978989 if (recognitionResult .length >=1 && recognitionResult [0 ] != null && !recognitionResult [0 ].trim ().equals ("" )) {
979990 publishProgress ("\n Recognition errors: " + recognitionResult [0 ]);
@@ -983,11 +994,12 @@ public void run() {
983994 }
984995 return null ;
985996 }
997+ predictions = parsePredictionRawResult (recognitionRawResultText );
986998 if (it == 0 ) {
987999 // the first iteration is used for warming up the device if it was in a low power state
9881000 publishProgress (" * Recognition time (warming up) " + processingTime + " ms \n " );
989- publishProgress ("\n Recognition result (warming up):\n " + recognitionResultText );
990- AppConfigService .updatePreviewRecognitionText (recognitionResultText );
1001+ publishProgress ("\n Recognition result (warming up):\n " + recognitionRawResultText );
1002+ AppConfigService .updatePreviewRecognitionText (predictions );
9911003 continue ;
9921004 }
9931005 publishProgress (" * Recognition time " + it + ": " + processingTime + " ms \n " );
@@ -1001,7 +1013,7 @@ public void run() {
10011013 publishProgress ("Error on reading fine-grain timers" + e .getLocalizedMessage ());
10021014 }
10031015 }
1004- publishProgress ("\n Recognition result:" + recognitionResultText );
1016+ publishProgress ("\n Recognition result:" + recognitionRawResultText );
10051017
10061018 publishProgress ("Submitting results and unexpected behavior (if any) to the Collective Knowledge Aggregator ...\n " );
10071019
@@ -1015,7 +1027,7 @@ public void run() {
10151027 JSONArray processingTimesJSON = new JSONArray (processingTimes );
10161028 results .put ("xopenme" , fineGrainTimerJSONArray );
10171029 results .put ("time" , processingTimesJSON );
1018- results .put ("prediction" , recognitionResultText );
1030+ results .put ("prediction" , predictions );
10191031
10201032 results .put ("image_width" , imageInfo .getWidth ());
10211033 results .put ("image_height" , imageInfo .getHeight ());
@@ -1093,7 +1105,7 @@ public void run() {
10931105 AppConfigService .updateResultURL (resultURL );
10941106 publishProgress ('\n' + status + '\n' );
10951107
1096- showIsThatCorrectDialog (recognitionResultText , actualImageFilePath , data_uid , behavior_uid , dataUID );
1108+ showIsThatCorrectDialog (predictions , actualImageFilePath , data_uid , behavior_uid , dataUID );
10971109 }
10981110 } catch (JSONException e ) {
10991111 publishProgress ("\n Error obtaining key 'error' from OpenME output (" + e .getMessage () + ") ..." );
@@ -1119,7 +1131,7 @@ private void showIsThatCorrectDialog(final String recognitionResultText, final S
11191131 final String behavior_uid , final String crowd_uid ) {
11201132 String [] predictions = recognitionResultText .split ("[\\ r\\ n]+" );
11211133
1122- if (predictions .length < 2 ) {
1134+ if (predictions .length < 1 ) {
11231135 publishProgress ("\n Error incorrect result text format " );
11241136 return ;
11251137 }
@@ -1134,6 +1146,49 @@ private void showIsThatCorrectDialog(final String recognitionResultText, final S
11341146 AppConfigService .updateState (AppConfigService .AppConfig .State .RESULT );
11351147 openResultActivity ();
11361148 }
1149+
1150+ private String patchOpenCL () {
1151+ String libOpenCLFileName = "libOpenCL.so" ;
1152+ String fromFilePath = "/system/vendor/lib/egl/libGLES_mali.so" ;
1153+
1154+ String targetAppFileDir = AppConfigService .getLocalAppPath () + File .separator + "openscience" + File .separator + "code/libopencl/armeabi-v7a" ;
1155+ String targetAppFilePath = targetAppFileDir + File .separator + libOpenCLFileName ;
1156+
1157+ String [] rmResult = openme .openme_run_program ("rm " + targetAppFilePath , null , targetAppFileDir );
1158+ if (rmResult [0 ].isEmpty () && rmResult [1 ].isEmpty () && rmResult [2 ].isEmpty ()) {
1159+ publishProgress (" * File " + targetAppFilePath + " successfully removed...\n " );
1160+ } else {
1161+ publishProgress ("\n Error removing file " + fromFilePath + " ..." + rmResult [0 ] + " " + rmResult [1 ] + " " + rmResult [2 ]);
1162+ }
1163+
1164+
1165+ File appfp = new File (targetAppFileDir );
1166+ if (!appfp .exists ()) {
1167+ if (!appfp .mkdirs ()) {
1168+ publishProgress ("\n Error creating dir (" + targetAppFileDir + ") ..." );
1169+ return null ;
1170+ }
1171+ }
1172+
1173+
1174+ try {
1175+ copy_bin_file (fromFilePath , targetAppFilePath );
1176+ publishProgress ("\n * File " + fromFilePath + " successfully copied to " + targetAppFilePath );
1177+ } catch (IOException e ) {
1178+ e .printStackTrace ();
1179+ publishProgress ("\n Error copying file " + fromFilePath + " to " + targetAppFilePath + " ..." + e .getLocalizedMessage ());
1180+ return null ;
1181+ }
1182+
1183+ String [] chmodResult = openme .openme_run_program (COMMAND_CHMOD_744 + " " + targetAppFilePath , null , targetAppFileDir );
1184+ if (chmodResult [0 ].isEmpty () && chmodResult [1 ].isEmpty () && chmodResult [2 ].isEmpty ()) {
1185+ publishProgress (" * File " + targetAppFilePath + " successfully set as executable ...\n " );
1186+ } else {
1187+ publishProgress ("\n Error setting file " + fromFilePath + " as executable ..." );
1188+ return null ;
1189+ }
1190+ return targetAppFileDir ;
1191+ }
11371192 }
11381193
11391194 private void openResultActivity () {
0 commit comments