zoukankan      html  css  js  c++  java
  • openmv之扫码

    以下图片可右击查看放大后查看左下角打印数据

    二维码

     1 import sensor, image
     2 
     3 sensor.reset()
     4 sensor.set_pixformat(sensor.RGB565)
     5 sensor.set_framesize(sensor.QQVGA) # can be QVGA on M7...
     6 sensor.skip_frames(30)
     7 sensor.set_auto_gain(False) # must turn this off to prevent image washout...
     8 while(True):
     9     img = sensor.snapshot()
    10     img.lens_corr(1.8) # strength of 1.8 is good for the 2.8mm lens.
    11     for code in img.find_qrcodes():
    12         print(code)             
    uart = UART(3, 9600)
        for code in img.find_qrcodes():
            message = code.payload()
            uart.write(message)
            print(code)

     image.find_qrcodes([roi])

    查找 roi 内的所有二维码并返回一个 image.qrcode 对象的列表。 请参考 image.qrcode 对象以获取更多信息。

     为使这一方法成功运行,图像上二维码需比较平展。因为openmv的镜头为鱼眼镜头可以通过物理镜头消除畸变影响,也可以通过使用 sensor.set_windowing 函数在镜头中心放大、image.lens_corr

    函数来消解镜头的桶形畸变或通过更换视野较为狭小的镜头, 您可得到一个不受镜头畸变影响的更为平展的二维码。有些机器视觉镜头不会造成桶形失真,但是其造价远比OpenMV提供的标准镜片高,这种镜头为无畸变镜头。

    roi 是一个用以复制的矩形的感兴趣区域(x, y, w, h)。如果未指定,ROI即整幅图像的图像矩形。 操作范围仅限于 roi 区域内的像素。

    不支持压缩图像和bayer图像。

    此方法在OpenMV Cam M4 上不可用。

    qrcode.corners()

    返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。

    qrcode.rect()

    返回一个矩形元组(x, y, w, h),用于如二维码的边界框的 image.draw_rectangle 等其他的 image 方法。

    qrcode.x()

    返回二维码的边界框的x坐标(int)。

    您也可以通过索引 [0] 取得这个值。

    qrcode.y()

    返回二维码的边界框的y坐标(int)。

    您也可以通过索引 [1] 取得这个值。

    qrcode.w()

    返回二维码的边界框的w坐标(int)。

    您也可以通过索引 [2] 取得这个值。

    qrcode.h()

    返回二维码的边界框的h坐标(int)。

    您也可以通过索引 [3] 取得这个值。

    qrcode.payload()

    返回二维码有效载荷的字符串,例如URL 。该示例中的内容为openmv  

    您也可以通过索引 [4] 取得这个值。

    qrcode.version()

    返回二维码的版本号(int)。

    您也可以通过索引 [5] 取得这个值。

    qrcode.ecc_level()

    返回二维码的ECC水平(int)。

    您也可以通过索引 [6] 取得这个值。

    qrcode.mask()

    返回二维码的掩码(int)。

    您也可以通过索引 [7] 取得这个值。

    qrcode.data_type()

    返回二维码的数据类型。

    您也可以通过索引 [8] 取得这个值。

    qrcode.eci()

    返回二维码的ECI。ECI储存了QR码中存储数据字节的编码。若您想要处理包含超过标准ASCII文本的二维码,您需要查看这一数值。

    您也可以通过索引 [9] 取得这个值。

    qrcode.is_numeric()

    若二维码的数据类型为数字式,则返回True。

    qrcode.is_alphanumeric()

    若二维码的数据类型为文字数字式,则返回True。

    qrcode.is_binary()

    若二维码的数据类型为二进制式,则返回True。如果您认真处理所有类型的文本,则需要检查eci是否为True,以确定数据的文本编码。通常它只是标准的ASCII,但是它也可能是有两个字节字符的UTF8。

    qrcode.is_kanji()

    若二维码的数据类型为日本汉字,则返回True。设置为True后,您就需要自行解码字符串,因为日本汉字符号每个字符是10位,而MicroPython不支持解析这类文本

    条形码

     1 import sensor, image, time, math
     2 
     3 sensor.reset()
     4 sensor.set_pixformat(sensor.GRAYSCALE)
     5 sensor.set_framesize(sensor.VGA) # High Res!
     6 sensor.set_windowing((640, 80)) # V Res of 80 == less work (40 for 2X the speed).
     7 sensor.skip_frames(30)
     8 sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
     9 sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
    10 clock = time.clock()
    11 
    12 # Barcode  detection can run at the full 640x480 resolution of your OpenMV Cam's
    13 # OV7725 camera module.  Barcode detection will also work in RGB565 mode but at
    14 # a lower resolution.  That said, barcode detection requires a higher resolution
    15 # to  work well so it should always be run at 640x480 in grayscale...
    16 
    17 def barcode_name(code):
    18     if(code.type() == image.EAN2):
    19         return "EAN2"
    20     if(code.type() == image.EAN5):
    21         return "EAN5"
    22     if(code.type() == image.EAN8):
    23         return "EAN8"
    24     if(code.type() == image.UPCE):
    25         return "UPCE"
    26     if(code.type() == image.ISBN10):
    27         return "ISBN10"
    28     if(code.type() == image.UPCA):
    29         return "UPCA"
    30     if(code.type() == image.EAN13):
    31         return "EAN13"
    32     if(code.type() == image.ISBN13):
    33         return "ISBN13"
    34     if(code.type() == image.I25):
    35         return "I25"
    36     if(code.type() == image.DATABAR):
    37         return "DATABAR"
    38     if(code.type() == image.DATABAR_EXP):
    39         return "DATABAR_EXP"
    40     if(code.type() == image.CODABAR):
    41         return "CODABAR"
    42     if(code.type() == image.CODE39):
    43         return "CODE39"
    44     if(code.type() == image.PDF417):
    45         return "PDF417"
    46     if(code.type() == image.CODE93):
    47         return "CODE93"
    48     if(code.type() == image.CODE128):
    49         return "CODE128"
    50 
    51 while(True):
    52     clock.tick()
    53     img = sensor.snapshot()
    54     codes = img.find_barcodes()
    55     for code in codes:
    56         img.draw_rectangle(code.rect())
    57         print_args = (barcode_name(code), code.payload(), (180 * code.rotation()) / math.pi, code.quality(), clock.fps())
    58         print("Barcode %s, Payload "%s", rotation %f (degrees), quality %d, FPS %f" % print_args)
    59     if not codes:
    60         print("FPS %f" % clock.fps())

    barcode.corners()

    返回一个由该对象的四个角组成的四个元组(x,y)的列表。四个角通常是按照从左上角开始沿顺时针顺序返回的。

    barcode.rect()

    返回一个矩形元组(x, y, w, h),用于如数据矩阵的边界框的 image.draw_rectangle 等其他的 image 方法。

    barcode.x()

    返回条形码的边界框的x坐标(int)。

    您也可以通过索引 [0] 取得这个值。

    barcode.y()

    返回条形码的边界框的y坐标(int)。

    您也可以通过索引 [1] 取得这个值。

    barcode.w()

    返回条形码的边界框的w宽度(int)。

    您也可以通过索引 [2] 取得这个值。

    barcode.h()

    返回条形码的边界框的h高度(int)。

    您也可以通过索引 [3] 取得这个值。

    barcode.payload()

    返回条形码的有效载荷的字符串。例:数量。

    您也可以通过索引 [4] 取得这个值。

    barcode.type()

    返回条形码的列举类型 (int)。

    您也可以通过索引 [5] 取得这个值。

    • image.EAN2
    • image.EAN5
    • image.EAN8
    • image.UPCE
    • image.ISBN10
    • image.UPCA
    • image.EAN13
    • image.ISBN13
    • image.I25
    • image.DATABAR
    • image.DATABAR_EXP
    • image.CODABAR
    • image.CODE39
    • image.PDF417 - 未来启用 (e.g. 现在还不能正常使用).
    • image.CODE93
    • image.CODE128
    barcode.rotation()

    返回以弧度计的条形码的旋度(浮点数)。

    您也可以通过索引 [6] 取得这个值。

    barcode.quality()

    返回条形码在图像中被检测到的次数(int)。

    扫描条形码时,每一条新的扫描线都能解码相同的条形码。每次进行这一过程,条形码的值都会随之增加。

    您也可以通过索引 [7] 取得这个值。

  • 相关阅读:
    DB-MySQL:MySQL 正则表达式
    DB-MySQL:MySQL 事务
    DB-MySQL:MySQL 索引
    DB-MySQL:MySQL 临时表
    DB-MySQL:MySQL 复制表
    DB-MySQL:MySQL 序列使用
    DB-MySQL:MySQL 处理重复数据
    DB-MySql:MySQL 及 SQL 注入
    mysql
    PHP+jQuery 注册模块的改进之一:验证码存入SESSION
  • 原文地址:https://www.cnblogs.com/miaorn/p/12242788.html
Copyright © 2011-2022 走看看