定位,标记,Socket通信传输位置

# -*- coding: utf-8 -*-
"""
Editor : X-POWER

Date : 2017-03-20

Motto : talk is cheap,show me your code !

This is a temporary script file.
"""


import numpy as np
import pyscreenshot as ImageGrab
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import cv2
import time        
import socket   # Network communication 


def client(num):
    mysocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    mysocket.connect(('192.168.1.101',1234))
    mysocket.send(str(num))
    print("+++++++++++++++++++++++++++++++++++++++")
    mysocket.close()
    

def draw_rectangle(img,location): 
    cv2.rectangle(img,(640 - location[0],480 - location[1]),(640 - location[2],480 - location[3]),(55,255,155),2) # Belongs to the picture , location , color , thickness 

def get_location():
    a = [[],[],[],[],[],[],[],[],[],[],[],[]]
    rectangle = [(130,180,170,255),(200,185,235,255),(405,205,430,270),(475,210,505,265),(170,115, 200,155),(230,120, 255,165),(385,130, 410,170),(440,130, 470,175),(190,60, 215,100),(245,65, 267,111),(370,75, 393,118),(420,75, 443,118)]
    for num in range(12):
        for i in range(rectangle[num][0],rectangle[num][2]):
            for j in range(rectangle[num][1],rectangle[num][3]):
                a[num].append((i,j))
    return a,rectangle        

def identify_method_one(im,draw_location,rectangle):  # image , 
    student_location = []
    for i in range(12):
        sum = 0
        
        for j in draw_location[i]:
            tem = im[j[1]][j[0]].sum()/3
            tem = abs(im[j[1]][j[0]][0]-tem) + abs(im[j[1]][j[0]][1]-tem) + abs(im[j[1]][j[0]][2]-tem)
            sum += tem
        sum /= ((rectangle[i][2]-rectangle[i][0]) * (rectangle[i][3] - rectangle[i][1]))
        
        student_location.append(sum)
  
    return student_location
            

draw_location,rectangle = get_location()

cap = cv2.VideoCapture("http://192.168.1.101:8080/?action=stream")

statue = 0
while True:
    
    
    ret, frame = cap.read()
    im = frame[::-1,::-1,]

    student_location = identify_method_one(im,draw_location,rectangle)
    count = 0
    location = []
    for i in student_location:
        if i >= 20:
            location.append(count)
        count += 1
    print(student_location)
    im = im[::-1,::-1,]
    for i in location:    #x mark all of the student location
        draw_rectangle(frame,rectangle[i]) 
    im = im[::-1,::-1,]
    #-------deal-------
    num = 0
    num1 = 0
    num2 = 0
    num3 = 0
    for i in location:
        if i>=0 and i<=3:
            num1 = 1
        if i>=4 and i<=7:
            num2 = 1
        if i>=8 and i<=11:
            num3 = 1
    if num1 == 1:
        num += 1
        
    if num2 == 1:
        num += 2
        
    if num3 == 1:
        num += 4
    #-------deal-------
    #print(num,statue)
    #------Socket-------
    if statue != num:
        print("---")
        statue = num
        client(num)
    #------Socket-------

    cv2.imshow("capture", im)
    if cv2.waitKey(1) and 0xFF == ord('q'):
        break


cap.release()
cv2.destroyAllWindows() 

 

posted @ 2017-03-21 01:21  X-POWER  阅读(392)  评论(0编辑  收藏  举报