Created
August 19, 2018 23:14
-
-
Save akirayou/912008baa42c88a0de21c1e507d946b4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
""" | |
Created on Thu Aug 9 22:50:30 2018 | |
@author: akira | |
""" | |
import time | |
import socket | |
import numpy as np | |
host = '192.168.1.214' #'224.0.0.1' | |
port = 13531 | |
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | |
d=None | |
def send_command(sock,data,idx,commandNo): | |
global d | |
global port,host | |
d=bytearray(5+len(data)) | |
d[0]=idx | |
ms=round(time.time()*1000) % 65536 | |
d[1]=ms//256 | |
d[2]=ms%256 | |
d[3]=commandNo | |
d[4]=0 | |
for i in range(len(data)): | |
d[5+i]=data[i] | |
sock.sendto(d, (host, port)) | |
def set_offset(sock,offset): | |
send_command(sock,[offset//256,offset%256],0,0) | |
def set_maxdelay(sock,d): | |
send_command(sock,[d//256,d%256],0,0) | |
def _send(sock,data,idx,startPos_Q): | |
global d | |
global port,host | |
assert data.shape[0]%2==0, "data len must be even" | |
d=bytearray(5+3*data.shape[0]) | |
d[0]=idx | |
ms=round(time.time()*1000) % 65536 | |
d[1]=ms//256 | |
d[2]=ms%256 | |
d[3]=startPos_Q | |
d[4]=data.shape[0]//2 | |
for i in range(data.shape[0]): | |
d[5+i*3+0]=data[i,0] | |
d[5+i*3+1]=data[i,1] | |
d[5+i*3+2]=data[i,2] | |
sock.sendto(d, (host, port)) | |
print(idx,startPos_Q,data.shape[0]//2,ms/1000.0) | |
def send(sock,data): | |
if not hasattr(send, "idx"):send.idx=0 | |
data_len=data.shape[0] | |
chunk_max=((1472-6)//3//8)*8 | |
for j in range(2): #dup send to aboid packet loss | |
for i in range(0,data_len,chunk_max): | |
chunk_len=min((chunk_max,data_len-i)) | |
_send(sock,data[i:i+chunk_len,:],send.idx,i//8) | |
send.idx+=1 | |
send.idx%=256 | |
set_offset(sock,20) | |
set_maxdelay(sock,200) | |
import cv2 | |
if "cap" in globals(): del cap | |
nofLed=1250 | |
nofOnLedL=5 | |
nofOnLed=2**nofOnLedL | |
nofBlock=(nofLed+nofOnLed-1)//nofOnLed; | |
nofLedR=nofBlock*nofOnLed; | |
count=0 | |
import time | |
cap = cv2.VideoCapture(1) | |
cap.set(10,1)#set Bright ness https://qiita.com/DoChi_72/items/a9fd82c1870b45aaf136 | |
def getDiff(mask): | |
global nofLed,nofLedR,sock | |
delay=1.0 | |
led=np.zeros( (nofLedR,3),dtype=np.ubyte) | |
send(sock,led[:nofLed,:]) | |
time.sleep(delay) | |
ret, f0 = cap.read() | |
ret, f0 = cap.read() | |
ret, f0 = cap.read() | |
led[::nofBlock,:][mask,:]=10 | |
send(sock,led[:nofLed,:]) | |
time.sleep(delay) | |
ret, f1 = cap.read() | |
ret, f1 = cap.read() | |
ret, f1 = cap.read() | |
f1=f1.astype(np.float)/255 | |
f0=f0.astype(np.float)/255 | |
diff=(f0-f1) | |
diff/=np.max(diff) | |
if(True): | |
cv2.imshow("f0",f0) | |
cv2.imshow("f1",f1) | |
cv2.imshow("diff",diff) | |
cv2.waitKey(1) | |
diff[diff<0]=0 | |
return diff | |
for i in range(100): | |
cap.read() | |
led=np.zeros( (nofLedR,3),dtype=np.ubyte) | |
led[::nofBlock,:]=10 | |
send(sock,led[:nofLed,:]) | |
#get n bit pattern | |
masks=[] | |
for n in range(nofOnLedL): | |
for b in range(2): #get low bit or high bit | |
mask=[] | |
for i in range(nofOnLed): | |
mod=2**n | |
o=1 | |
if(mod&i): o^=1 | |
o^=b | |
if(o!=0):mask.append(i) | |
masks.append(getDiff(mask)) | |
def getSingle(masks,idx): | |
global nofOnLedL | |
for i in range(nofOnLedL): | |
b=2**i | |
b=1 if b&idx != 0 else 0 | |
if i==0 : | |
ret=masks[b] | |
else: | |
ret*=masks[i*2+b] | |
ret=ret**(1.0/nofOnLedL) | |
ret/=np.max(ret ) | |
return ret | |
for i in range(nofOnLed): | |
cv2.imshow("tt",getSingle(masks,i)) | |
cv2.waitKey(1000) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment