Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
515
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.36 KB | None | 0 0
  1. package com.example.ahrytsavets.camera;
  2.  
  3. import android.annotation.TargetApi;
  4. import android.content.Intent;
  5. import android.graphics.Bitmap;
  6. import android.icu.text.SimpleDateFormat;
  7. import android.os.Build;
  8. import android.os.Environment;
  9. import android.provider.Settings;
  10. import android.support.annotation.RequiresApi;
  11. import android.support.v7.app.AppCompatActivity;
  12. import android.os.Bundle;
  13. import android.text.format.Time;
  14. import android.util.Log;
  15. import android.view.SurfaceView;
  16. import android.view.Window;
  17. import android.view.WindowManager;
  18. import android.widget.TextView;
  19.  
  20. import org.opencv.android.CameraBridgeViewBase;
  21. import org.opencv.android.OpenCVLoader;
  22. import org.opencv.android.Utils;
  23. import org.opencv.core.Core;
  24. import org.opencv.core.CvException;
  25. import org.opencv.core.CvType;
  26. import org.opencv.core.Mat;
  27. import org.opencv.core.MatOfPoint;
  28. import org.opencv.core.Point;
  29. import org.opencv.core.Rect;
  30. import org.opencv.core.Scalar;
  31. import org.opencv.core.Size;
  32. import org.opencv.imgcodecs.Imgcodecs;
  33. import org.opencv.imgproc.Imgproc;
  34.  
  35. import java.io.File;
  36. import java.io.FileOutputStream;
  37. import java.sql.Timestamp;
  38. import java.util.ArrayList;
  39. import java.util.Calendar;
  40. import java.util.Date;
  41. import java.util.List;
  42. import java.util.concurrent.ExecutorService;
  43. import java.util.concurrent.Executors;
  44. import java.util.logging.Logger;
  45.  
  46. import javax.mail.internet.MimeMessage;
  47.  
  48. import static org.opencv.imgproc.Imgproc.GaussianBlur;
  49. import static org.opencv.imgproc.Imgproc.contourArea;
  50. import static org.opencv.imgproc.Imgproc.cvtColor;
  51. import static org.opencv.imgproc.Imgproc.findContours;
  52.  
  53.  
  54.  
  55. @RequiresApi(api = Build.VERSION_CODES.N)
  56. public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
  57.  
  58. private CameraBridgeViewBase mOpenCvCameraView;
  59. private Object currentFrame;
  60. private Object previousFrame;
  61. private Size size = new Size(3, 3);
  62. private int sensivity = 30;
  63. private double maxArea = 100;
  64. private Scalar redColor = new Scalar(255, 0, 0);
  65. private boolean isMoved = false;
  66. public final String TAG = "MainActivity:";
  67. private Calendar currentTime = null;
  68. public Calendar startTime = null;
  69. public Calendar stopTime = null;
  70.  
  71. @Override
  72. protected void onCreate(Bundle savedInstanceState) {
  73. super.onCreate(savedInstanceState);
  74. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  75. getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  76. OpenCVLoader.initDebug();
  77. setContentView(R.layout.activity_main);
  78. mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.view);
  79. mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
  80. mOpenCvCameraView.setCvCameraViewListener(this);
  81. previousFrame = new Mat(720, 1280, CvType.CV_8UC3);
  82. currentFrame = new Mat(720, 1280, CvType.CV_8UC3);
  83. startTime = getCalendarFromTime(12, 0, 0);
  84. stopTime = getCalendarFromTime(17, 0, 0);
  85.  
  86. }
  87.  
  88. @Override
  89. public void onPause()
  90. {
  91. super.onPause();
  92. if (mOpenCvCameraView != null)
  93. mOpenCvCameraView.disableView();
  94. }
  95.  
  96. @Override
  97. public void onResume()
  98. {
  99. super.onResume();
  100. mOpenCvCameraView.enableView();
  101. }
  102.  
  103. public void onDestroy() {
  104. super.onDestroy();
  105. if (mOpenCvCameraView != null)
  106. mOpenCvCameraView.disableView();
  107. }
  108.  
  109. @Override
  110. public void onCameraViewStarted(int width, int height) {
  111.  
  112. }
  113.  
  114. @Override
  115. public void onCameraViewStopped() {
  116.  
  117. }
  118.  
  119. @Override
  120. public Mat onCameraFrame(final CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
  121. ExecutorService emailExecutor = Executors.newSingleThreadExecutor();
  122. currentFrame = inputFrame.rgba();
  123. try{
  124. currentFrame = detectMotion((Mat)currentFrame, (Mat)previousFrame);
  125. currentTime = Calendar.getInstance();
  126. if(isMoved && currentTime.after(startTime) && currentTime.before(stopTime)){
  127. savePicture((Mat)currentFrame);
  128. emailExecutor.execute(new Runnable() {
  129. @Override
  130. public void run() {
  131. try {
  132. sendEmail();
  133. } catch (Exception e) {
  134. Log.d(TAG, e.getMessage() + e.getCause());
  135. }
  136. }
  137. });
  138. isMoved = false;
  139. Log.d(TAG, "Email was sended");
  140. }
  141. Thread.currentThread().sleep(1000);
  142. }catch (Exception e){
  143. Log.d(TAG, e.getMessage());
  144. }
  145. previousFrame = inputFrame.rgba();
  146. return (Mat)currentFrame;
  147. }
  148.  
  149. public Mat detectMotion(Mat currentInputFrame, Mat previousInputFrame) {
  150. Mat outputFrame = new Mat();
  151. Mat resultFrame = new Mat();
  152. currentInputFrame.copyTo(outputFrame);
  153. currentInputFrame.copyTo(outputFrame);
  154. Mat vector = new Mat();
  155. List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
  156.  
  157. Imgproc.GaussianBlur(currentInputFrame, currentInputFrame, size, 0);
  158. Imgproc.GaussianBlur(previousInputFrame, previousInputFrame, size, 0);
  159. Core.subtract(previousInputFrame, currentInputFrame, resultFrame);
  160. Imgproc.cvtColor(resultFrame, resultFrame, Imgproc.COLOR_RGB2GRAY);
  161. Imgproc.threshold(resultFrame, resultFrame, sensivity, 255, Imgproc.THRESH_BINARY);
  162. findContours(resultFrame, contours, vector, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
  163. for(int i = 0; i< contours.size(); i++){
  164. isMoved = true;
  165. Mat contour = contours.get(i);
  166. double minContourArea = Imgproc.contourArea(contour, false);
  167. if(minContourArea > maxArea) {
  168. Rect r = Imgproc.boundingRect(contours.get(i));
  169. Imgproc.rectangle(outputFrame, r.br(), r.tl(), redColor, 1);
  170. }
  171. contour.release();
  172. }
  173. return outputFrame;
  174. }
  175. public void sendEmail(){
  176. try {
  177. MailSender sender = new MailSender("detectorOfMotions@gmail.com", "16101996");
  178. sender.sendMail("Motion Detector",
  179. "Motion was detected at" + currentTime.getTime().toString(),
  180. "detectorOfMotions@gmail.com",
  181. "hrytsavetsanton@gmail.com", Environment.getExternalStorageDirectory()
  182. + "/MotionDetector/" + currentTime.getTime().toString()+".png");
  183. } catch (Exception e) {
  184. Log.e("SendMail", e.getMessage(), e);
  185. }
  186. }
  187. public void savePicture(Mat frame){
  188. File path = new File(Environment.getExternalStorageDirectory() + "/MotionDetector");
  189. String filename = currentTime.getTime().toString()+".png";
  190. File file = new File(path, filename);
  191. filename = file.toString();
  192. Imgcodecs.imwrite(filename,frame);
  193. }
  194. private static Calendar getCalendarFromTime(int hourOfDay, int minute, int second) {
  195. Calendar result = Calendar.getInstance();
  196. result.set(Calendar.HOUR_OF_DAY, hourOfDay);
  197. result.set(Calendar.MINUTE, minute);
  198. result.set(Calendar.SECOND, second);
  199. return result;
  200. }
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement