-->
当前位置:首页 > DayDayUp > 正文内容

基于摄像头采集环境图像帧间差异的真随机数生成方法

Luz2年前 (2022-05-16)DayDayUp3795

通过摄像头两帧图像采样,分析两帧图像中差异像素,并将像素灰度差异值转换为二进制比特作为随机比特

import cv2
cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)
def process_frame(frame):
    return frame

def get_img():

    success, frame = cap.read()
    success, frame2 = cap.read()
    if not success:
        print('error!')
    #frame = process_frame(frame)
    
    cv2.destroyAllWindows()
    gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    rst=[]
    for i in gray:
        for j in i:
            rst.append(j)
    gray2=cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
    rst2=[]
    for i in gray2:
        for j in i:
            rst2.append(j)
    return rst,rst2
def main():
    while(1):
        rst1,rst2=pixel1=get_img()
        #rst2=pixel2=get_img()
        resu=[]
        for i in range(len(rst1)):
            if(rst1[i]!=rst2[i]):
                resu.append(abs(rst1[i]-rst2[i])%2)
        print("本轮生成二进制随机数位数:",len(resu))
        output=""
        for i in resu[:200]:
            output=output+str(i)
        print("随机数前200位为:",output)
    cap.release()
if __name__ == '__main__':
    main()

收到环境噪声影响,相机采集到像素中的每个像素都可以发生不可预测的变化,作为真随机数产生的依据,生成效果如下图所示

屏幕截图 2022-05-16 133034.png

丢弃帧间相同灰度的像素点

在摄像头采样率为24fps,像素为200w pixel的情况下,理论每秒最多可以生成24/2*2000000=2400w位比特,可以说效率极高了

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。