week21 Rovergo交接 ASC选拔 openmv入门

昨天在梦里,我又看见你,宝贝,他们说,我不爱你
你拥有我的,不只是今天,可是,你比我 小了几岁
如果我们不能结婚,你怎么受得了,宝贝 我知道虽然你不说
如果我们就要结婚,我怎么能受得了,宝贝 别在夜里等我

Rovergo

海哥短暂地停留了两天,跑了榜样的力量答辩、项目组的餐会、给学弟学妹的经验分享会、老友的健身之约、与旧交的畅谈,以及与我的交接(海哥是真的累,就不能给自己多休息两天吗实在太忙了)。
拿到了期待好久的项目,或许我骨子里是自私与逃避的人,我没有想象中那般激动与喜悦,反而第一感受是:我失去了一把保护伞、失去了一个踏实肯干的队长、失去了一个值得信赖的队友。从今天起,我就要开始自己当队长了,或许会再带一个学弟还有泰山的同学,亦或只有我和卓宇。我感到忐忑、不安和恐惧,这是我拿到的第一个无从下手的项目。但是转念一想,这又是一件很好的事情,出不出成果先不说,它是在我能力范围稍上的一件事,不管是组织团队还是技术细节,都特别特别考验人。

模拟退火算法
退火

模拟退火其实也是一种Greedy算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以上图为例,模拟退火算法在搜索到局部最优解B后,会以一定的概率接受向右继续移动。也许经过几次这样的不是局部最优的移动后会到达B 和C之间的峰点,于是就跳出了局部最小值B。

根据Metropolis准则,粒子在温度T时趋于平衡的概率为exp(-ΔE/(kT)),其中E为温度T时的内能,ΔE为其改变数,k为Boltzmann常数。Metropolis准则常表示为


image.png

Metropolis准则表明,在温度为T时,出现能量差为dE的降温的概率为P(dE),表示为:P(dE) = exp( dE/(kT) )。其中k是一个常数,exp表示自然指数,且dE<0。所以P和T正相关。这条公式就表示:温度越高,出现一次能量差为dE的降温的概率就越大;温度越低,则出现降温的概率就越小。又由于dE总是小于0(因为退火的过程是温度逐渐下降的过程),因此dE/kT < 0 ,所以P(dE)的函数取值范围是(0,1) 。随着温度T的降低,P(dE)会逐渐降低。

我们将一次向较差解的移动看做一次温度跳变过程,我们以概率P(dE)来接受这样的移动。也就是说,在用固体退火模拟组合优化问题,将内能E模拟为目标函数值 f,温度T演化成控制参数 t,即得到解组合优化问题的模拟退火演算法:由初始解 i 和控制参数初值 t 开始,对当前解重复“产生新解→计算目标函数差→接受或丢弃”的迭代,并逐步衰减 t 值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值 t 及其衰减因子Δt 、每个 t 值时的迭代次数L和停止条件S。

二分查找法

时间复杂度按优劣排差不多集中在:
O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)
到目前为止,时间复杂度是O(log n),好像就数二分查找法,其他的诸如排序算法都是 O(n log n)或者O(n2)。但是也正是因为有二分的 O(log n), 才让很多 O(n2)缩减到只要O(n log n)。
条件:存储在数组中、有序排列

推荐博客:算法与数据结构 - 随笔分类 - ranjiewen - 博客园 https://www.cnblogs.com/ranjiewen/category/789809.html

openmv

官网:https://book.openmv.cc/
硬件实物:Openmv3 M7 摄像头
软件:官网下载的Openmv IDE
OpenMV项目创造一款低价,可扩展,支持Python的机器视觉模块,这个模块的目标是成为"机器视觉世界的Arduino",OpenMV搭载MicroPython解释器,这允许我们在嵌入式上使用Python来编程 (Python 3 to be precise). Python使机器视觉算法的编程变得简单得多。比如,直接调用find_blobs()方法,就可以获得一个列表,包含所有色块的信息。 使用python遍历每一个色块,就可以获取他们所有信息,而这些,只需要两行代码!
简单来说,openmv是一款基于python的可编程摄像头,内置许多库函数,实现了常用功能如颜色识别、目标检测、对象跟踪,并且所有代码都是开源的。东西绝对好用,就是这个价格嘛......一个正版的(带IDE的key 相当于激活码)300多,再加个防畸变摄像头,400+,还是有点小贵的

普通镜头

可以看到,在自带的IDE中,核心部分为代码实现,左边为快捷键,上面为工具栏,右上角为摄像头画面,画面下为颜色分布直方图

import sensor, image, time

sensor.reset()                      # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.QVGA)   # Set frame size to QVGA (320x240)
sensor.skip_frames(time = 2000)     # Wait for settings take effect.
clock = time.clock()                # Create a clock object to track the FPS.

while(True):
    clock.tick()                    # Update the FPS clock.
    img = sensor.snapshot()         # Take a picture and return the image.
    print(clock.fps())              # Note: OpenMV Cam runs about half as fast when connected
                                # to the IDE. The FPS should increase once disconnected.

通过输入指定颜色参数,识别并标记符合该颜色的物体,如图的水杯和奥利奥

颜色追踪
import sensor, image, time, math

# Color Tracking Thresholds (L Min, L Max, A Min, A Max, B Min, B Max)
# The below thresholds track in general red/green things. You may wish to tune them...
thresholds = [(30, 100, 15, 127, 15, 127), # generic_red_thresholds
          (30, 100, -64, -8, -32, 32), # generic_green_thresholds
          (0, 15, 0, 40, -80, -20)] # generic_blue_thresholds
# You may pass up to 16 thresholds above. However, it's not really possible to segment any
# scene with 16 thresholds before color thresholds start to overlap heavily.

sensor.reset()
sensor.set_pixformat(sensor.RGB565)  
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
sensor.set_auto_gain(False) # must be turned off for color tracking
sensor.set_auto_whitebal(False) # must be turned off for color tracking
clock = time.clock()

# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are
# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the
# camera resolution. Don't set "merge=True" becuase that will merge blobs which we don't want here.

while(True):
    clock.tick()
    img = sensor.snapshot()
    for blob in img.find_blobs(thresholds, pixels_threshold=200, 
area_threshold=200):
    # These values depend on the blob not being circular - otherwise they will be shaky.
        if blob.elongation() > 0.5:
            img.draw_edges(blob.min_corners(), color=(255,0,0))
            img.draw_line(blob.major_axis_line(), color=(0,255,0))
            img.draw_line(blob.minor_axis_line(), color=(0,0,255))
    # These values are stable all the time.
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
    #  Note - the blob rotation is unique to 0-180 only.
        img.draw_keypoints([(blob.cx(), blob.cy(), 
int(math.degrees(blob.rotation())))], size=20)
    print(clock.fps())

选拔

其实我当初报名的时候满脑子在想自己被刷了怎么办会不会丢面儿......正巧遇上了芳芳就拉着他一块面啊,这样共进退多好我也不尴尬......没想到有位哥功成身退不想干了去享受生活,我心里想他这锅甩的好啊就是谁来接啊,结果我自己大差不差成了队长?之后选人的时候也出现了一点小插曲。原来有时候做决定,真的不是由着自己的心意,而是由自己的立场决定,哪怕我做的没有对团队有多么好但我也不要做有害于团队的事(看来我还是挺适合进国企的hhhh)

在一天的折腾之后我身心俱疲,下午上完课躺在床上我只想静静的睡一觉。所幸最后大家把话都说开了,该道的歉也道了,该做的决定也做了,耶北京时间2019年12月10日0时51分,我终于可以上床睡觉啦!感谢老师的信任,坦白说我没有想到和硬件这么相关,就是在挑战我的编译原理和微处理器,希望能把队伍带好大家一起加油呀!

你可能感兴趣的:(week21 Rovergo交接 ASC选拔 openmv入门)