树莓派USB摄像头拍照上传至PC

一时失言乱红尘 2022-04-24 02:38 367阅读 0赞

原文地址 —->巴普洛夫的石头的博客

先保存一份代码,日后写一份详细的编码过程

Client.py

  1. import socket
  2. import time
  3. import os
  4. import sys
  5. import struct
  6. def sock_client():
  7. try:
  8. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  9. s.connect(('192.168.1.178', 6666))
  10. except socket.error as msg:
  11. print(msg)
  12. print(sys.exit(1))
  13. while True:
  14. #filepath = input('input the file: ')
  15. os.system("fswebcam -S 10 image2.jpg")
  16. time.sleep(1)
  17. filepath = 'image2.jpg'
  18. fhead = struct.pack(b'128sl', bytes(os.path.basename(filepath).encode('utf-8')), os.stat(filepath).st_size)
  19. s.send(fhead)
  20. print('client filepath: {0}'.format(filepath))
  21. fp = open(filepath, 'rb')
  22. while 1:
  23. data = fp.read(1024)
  24. if not data:
  25. print('{0} file send over...'.format(filepath))
  26. break
  27. s.send(data)
  28. s.close()
  29. break
  30. if __name__ == '__main__':
  31. sock_client()

Server.py

  1. # -*- coding: UTF-8 -*-
  2. from imageai.Prediction import ImagePrediction
  3. import socket
  4. import os
  5. import sys
  6. import struct
  7. import time
  8. def socket_service():
  9. try:
  10. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  11. s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  12. s.bind(('192.168.1.101', 6666))
  13. s.listen(10)
  14. except socket.error as msg:
  15. print(msg)
  16. sys.exit(1)
  17. print("Wait")
  18. while True:
  19. sock, addr = s.accept()
  20. deal_data(sock, addr)
  21. break
  22. s.close()
  23. def deal_data(sock, addr):
  24. print("Accept connection from {0}".format(addr))
  25. while True:
  26. fileinfo_size = struct.calcsize('128sl')
  27. buf = sock.recv(fileinfo_size)
  28. if buf:
  29. filename, filesize = struct.unpack('128sl', buf)
  30. fn = filename.decode().strip('\x00')
  31. new_filename = os.path.join('./', 'new_' + fn)
  32. recvd_size = 0
  33. fp = open(new_filename, 'wb')
  34. while not recvd_size == filesize:
  35. if filesize - recvd_size > 1024:
  36. data = sock.recv(1024)
  37. recvd_size += len(data)
  38. else:
  39. data = sock.recv(1024)
  40. recvd_size = filesize
  41. fp.write(data)
  42. fp.close()
  43. sock.close()
  44. break
  45. if __name__ == '__main__':
  46. socket_service()

发表评论

表情:
评论列表 (有 0 条评论,367人围观)

还没有评论,来说两句吧...

相关阅读