Skip to content

Commit

Permalink
OCR, CPV 샘플 코드 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
changdol committed Mar 9, 2020
1 parent 2ea89aa commit a22afe7
Show file tree
Hide file tree
Showing 23 changed files with 741 additions and 87 deletions.
6 changes: 4 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@
<activity android:name=".CsrActivity" />
<activity android:name=".AuthActivity" />
<activity android:name=".VoiceChatbotActivity" />
<activity android:name=".NmtActivity"></activity>
<activity android:name=".NmtActivity2"/>
<activity android:name=".NmtActivity" />
<activity android:name=".NmtActivity2" />
<activity android:name=".CpvActivity" />
<activity android:name=".OcrActivity" />
</application>

</manifest>
15 changes: 15 additions & 0 deletions app/src/main/java/com/example/user/ncpaidemo/BaseActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,21 @@ public boolean onOptionsItemSelected(MenuItem item) {

return true;

case R.id.menu_cpv:

intent = new Intent(getApplicationContext(), CpvActivity.class);
startActivity(intent);

return true;


case R.id.menu_ocr:

intent = new Intent(getApplicationContext(), OcrActivity.class);
startActivity(intent);

return true;

default :
return super.onOptionsItemSelected(item);
}
Expand Down
100 changes: 100 additions & 0 deletions app/src/main/java/com/example/user/ncpaidemo/CpvActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
package com.example.user.ncpaidemo;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.ncp.ai.demo.process.CpvProc;

public class CpvActivity extends BaseActivity {

Button cpvBtn;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cpv);

SharedPreferences sharedPref = getSharedPreferences("PREF", Context.MODE_PRIVATE);
final String clientId = sharedPref.getString("application_client_id", "");
final String clientSecret = sharedPref.getString("application_client_secret", "");

cpvBtn = (Button) findViewById(R.id.btn_cpv);
cpvBtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

EditText cpvInputText = (EditText) findViewById(R.id.text_input_cpv);
String strText = cpvInputText.getText().toString();

Spinner spinner = (Spinner)findViewById(R.id.spinner_cpv_lang);
String selItem = spinner.getSelectedItem().toString();

String[] splits = selItem.split("\\(");

String speaker = splits[0];

if (speaker.isEmpty() || speaker.equals("")){
speaker = "mijin";
}

CpvActivity.NaverTTSTask tts = new CpvActivity.NaverTTSTask();
tts.execute(strText, speaker, clientId, clientSecret);
}
});

Spinner s = (Spinner)findViewById(R.id.spinner_cpv_lang);
s.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {

Spinner s = (Spinner)findViewById(R.id.spinner_cpv_lang);
String lang = s.getSelectedItem().toString();
String text = "";
if (lang.contains("한국어")) {
text = "네이버 클라우드 플랫폼에서는 Clova, papago 등 네이버의 다양한 인공지능 서비스를 API 형태로 제공합니다.";
}else if (lang.contains("영어")) {
text = "NAVER CLOUD PLATFORM provides various AI services in API formats, such as Clova and Papago.";
}else if (lang.contains("일본어")) {
text = "NAVER CLOUD PLATFORMは、ClovaやPapagoなどのAPIフォーマットでさまざまなAIサービスを提供します.";

}else if (lang.contains("중국어")) {
text = "NAVER CLOUD PLATFORM以API格式提供各种AI服务,例如Clova和Papago.";

}else if (lang.contains("스페인어")) {
text = "NAVER CLOUD PLATFORM proporciona varios servicios de AI en formatos API, como Clova y Papago.";

}else {
text = "";
}

TextView textViewVersionInfo = (TextView) findViewById(R.id.text_input_cpv);
textViewVersionInfo.setText(text);

}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
});

}

public class NaverTTSTask extends AsyncTask<String, String, String> {

@Override
public String doInBackground(String... strings) {

CpvProc.main(strings[0], strings[1], strings[2], strings[3]);
return null;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.TextView;

public class MainActivity extends BaseActivity {
Expand All @@ -13,6 +14,12 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (android.os.Build.VERSION.SDK_INT > 9)
{
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}

String versionName = "";

try {
Expand Down
2 changes: 0 additions & 2 deletions app/src/main/java/com/example/user/ncpaidemo/NmtActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,6 @@ public void ReturnThreadResult(String result) {
} catch (Exception e){

}


}

public class PapagoNmtTask extends AsyncTask<String, String, String> {
Expand Down
103 changes: 103 additions & 0 deletions app/src/main/java/com/example/user/ncpaidemo/OcrActivity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package com.example.user.ncpaidemo;

import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.Settings;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.JsonReader;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

import com.ncp.ai.demo.process.NmtProc;
import com.ncp.ai.demo.process.OcrProc;

import org.json.JSONArray;
import org.json.JSONObject;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;

public class OcrActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ocr);

SharedPreferences sharedPref = getSharedPreferences("PREF", Context.MODE_PRIVATE);

final String ocrApiGwUrl = sharedPref.getString("ocr_api_gw_url", "");
final String ocrSecretKey = sharedPref.getString("ocr_secret_key", "");

Button ocrTranslateBtn;

ocrTranslateBtn = (Button) findViewById(R.id.btn_ocr_translate);
ocrTranslateBtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

OcrActivity.PapagoNmtTask nmtTask = new OcrActivity.PapagoNmtTask();
nmtTask.execute(ocrApiGwUrl, ocrSecretKey);
}
});
}

public class PapagoNmtTask extends AsyncTask<String, String, String> {

@Override
public String doInBackground(String... strings) {

return OcrProc.main(strings[0], strings[1]);
}

@Override
protected void onPostExecute(String result) {

ReturnThreadResult(result);
}
}

public void ReturnThreadResult(String result) {
System.out.println("### Retrun Thread Result");
String translateText = "";

String rlt = result;
try {
JSONObject jsonObject = new JSONObject(rlt);

JSONArray jsonArray = jsonObject.getJSONArray("images");

for (int i = 0; i < jsonArray.length(); i++ ){

JSONArray jsonArray_fields = jsonArray.getJSONObject(i).getJSONArray("fields");

for (int j=0; j < jsonArray_fields.length(); j++ ){

String inferText = jsonArray_fields.getJSONObject(j).getString("inferText");
translateText += inferText;
translateText += " ";
}
}

TextView txtResult = (TextView) findViewById(R.id.textView_ocr_result);
txtResult.setText(translateText);

} catch (Exception e){

}
}
}
9 changes: 0 additions & 9 deletions app/src/main/java/com/ncp/ai/demo/process/ChatbotProc.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
package com.ncp.ai.demo.process;

import android.media.MediaPlayer;
import android.os.Environment;
import android.util.Base64;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.Timestamp;
import java.util.Date;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import android.util.Base64;

import org.json.JSONArray;
import org.json.JSONObject;
Expand Down
85 changes: 85 additions & 0 deletions app/src/main/java/com/ncp/ai/demo/process/CpvProc.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.ncp.ai.demo.process;

import android.media.MediaPlayer;
import android.os.Environment;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

public class CpvProc {


public static void main(String msg, String speaker, String clientId, String clientSecret) {

try {
String text = URLEncoder.encode(msg, "UTF-8");
String apiURL = "https://naveropenapi.apigw.ntruss.com/voice-premium/v1/tts";
URL url = new URL(apiURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("X-NCP-APIGW-API-KEY-ID", clientId);
con.setRequestProperty("X-NCP-APIGW-API-KEY", clientSecret);
// post request
String postParams = "speaker="+speaker+"&speed=0&text="+text;
System.out.println(postParams);
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(postParams);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
BufferedReader br;
System.out.println("## response code : "+responseCode);
if(responseCode==200) { // 정상 호출
InputStream is = con.getInputStream();
int read = 0;
byte[] bytes = new byte[1024];

File dir = new File(Environment.getExternalStorageDirectory()+"/", "NCP");

if(!dir.exists()){
dir.mkdirs();
}

String tempname = "csstemp";
File f = new File( Environment.getExternalStorageDirectory() + File.separator + "NCP/" + tempname + ".mp3");
f.createNewFile();
OutputStream outputStream = new FileOutputStream(f);
while ((read =is.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
is.close();

String pathToFile = Environment.getExternalStorageDirectory() + File.separator + "NCP/" + tempname + ".mp3";
MediaPlayer audioPlay = new MediaPlayer();
audioPlay.setDataSource(pathToFile);
audioPlay.prepare();
audioPlay.start();

System.out.println("## fie path : "+ pathToFile);

} else { // 에러 발생
br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = br.readLine()) != null) {
response.append(inputLine);
}
br.close();
System.out.println(response.toString());
}
} catch (Exception e) {
System.out.println(e);
}
}


}
8 changes: 0 additions & 8 deletions app/src/main/java/com/ncp/ai/demo/process/CsrProc.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,6 @@ public CsrProc(Context context, String clientId) {
mRecognizer = new SpeechRecognizer(context, clientId);

} catch (SpeechRecognitionException e) {
// 예외가 발생하는 경우는 아래와 같습니다.
// 1. activity 파라미터가 올바른 MainActivity의 인스턴스가 아닙니다.
// 2. AndroidManifest.xml에서 package를 올바르게 등록하지 않았습니다.
// 3. package를 올바르게 등록했지만 과도하게 긴 경우, 256바이트 이하면 좋습니다.
// 4. clientId가 null인 경우
//
// 개발하면서 예외가 발생하지 않았다면 실서비스에서도 예외는 발생하지 않습니다.
// 개발 초기에만 주의하시면 됩니다.
e.printStackTrace();
}

Expand Down
Loading

0 comments on commit a22afe7

Please sign in to comment.