Skip to content

Instantly share code, notes, and snippets.

@akirayou
Created August 19, 2018 23:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akirayou/912008baa42c88a0de21c1e507d946b4 to your computer and use it in GitHub Desktop.
Save akirayou/912008baa42c88a0de21c1e507d946b4 to your computer and use it in GitHub Desktop.
# -*- 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