├── README.md ├── main ├── res │ ├── values │ │ ├── strings.xml │ │ ├── dimens.xml │ │ ├── colors.xml │ │ └── styles.xml │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ ├── values-w820dp │ │ └── dimens.xml │ └── layout │ │ └── activity_main.xml ├── AndroidManifest.xml └── java │ └── cehua │ └── hxm │ └── com │ └── myvideo │ ├── MainActivity.java │ ├── Socket_Client.java │ └── Base64Util.java └── t.py /README.md: -------------------------------------------------------------------------------- 1 | # Python-opencv-Android 2 | 通过python用Socket把图片发送到Android上 3 | 黑小马 4 | -------------------------------------------------------------------------------- /main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | My Video 3 | 4 | -------------------------------------------------------------------------------- /main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heixiaoma/Python-opencv-Android/master/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heixiaoma/Python-opencv-Android/master/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heixiaoma/Python-opencv-Android/master/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heixiaoma/Python-opencv-Android/master/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/heixiaoma/Python-opencv-Android/master/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /t.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import numpy as np 3 | import socket 4 | import base64 5 | 6 | # 开启ip和端口 7 | ip_port = ('192.168.0.106', 7999) 8 | # 生成一个句柄 9 | sk = socket.socket() 10 | # 绑定ip端口 11 | sk.bind(ip_port) 12 | # 最多连接数 13 | sk.listen(5) 14 | # 开启死循环 15 | print('server waiting...') 16 | # 等待链接,阻塞,直到渠道链接 conn打开一个新的对象 专门给当前链接的客户端 addr是ip地址 17 | conn, addr = sk.accept() 18 | # 获取客户端请求数据 19 | cap = cv2.VideoCapture(0) 20 | while(1): 21 | # get a frame 22 | ret, frame = cap.read() 23 | # show a frame 24 | cv2.imshow("capture", frame) 25 | cv2.imwrite("temp.jpg", frame) 26 | # 向对方发送数据 27 | f = open(r'temp.jpg', 'rb') # 二进制方式打开图文件 28 | ls_f = base64.b64encode(f.read()) # 读取文件内容,转换为base64编码 29 | print(ls_f) 30 | conn.sendall(ls_f) 31 | conn.sendall(bytes('eof', 'utf8')) 32 | f.close() 33 | if cv2.waitKey(1) & 0xFF == ord('q'): 34 | break 35 | cap.release() 36 | cv2.destroyAllWindows() 37 | # 关闭链接 38 | conn.close() 39 | 40 | -------------------------------------------------------------------------------- /main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /main/java/cehua/hxm/com/myvideo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package cehua.hxm.com.myvideo; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.util.Log; 6 | import android.view.View; 7 | import android.widget.Button; 8 | import android.widget.EditText; 9 | import android.widget.ImageView; 10 | 11 | public class MainActivity extends AppCompatActivity { 12 | private Button start_bn; 13 | private EditText ip; 14 | private EditText port; 15 | private ImageView img; 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_main); 20 | start_bn=(Button) findViewById(R.id.button); 21 | img=(ImageView)findViewById(R.id.imageView); 22 | ip=(EditText)findViewById(R.id.editText); 23 | port=(EditText)findViewById(R.id.editText2); 24 | start_bn.setOnClickListener(new View.OnClickListener() { 25 | @Override 26 | public void onClick(View v) { 27 | new Socket_Client(ip.getText().toString(),Integer.parseInt(port.getText().toString()),img); 28 | } 29 | }); 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 |