李尚杰的第一次作业

这次作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc
这个作业的目标 熟悉博客的建立,向老师/助教介绍自己并阐述对课程的期待
姓名-学号 李尚杰-2022329301146

一、个人简介

(一)基本介绍

  我叫李尚杰,来自22自动化1班,浙江杭州人。我爱好摄影、旅游、看电影、健身,热衷于到处看世界也热衷于丰富自己。在过去的两年生活中,我遇到了很多朋友,也结识了许多师长前辈,通过一点一滴的积累,不断向着更好的自己迈进。

重庆洪崖洞的夜景
旭日东升时的宝石山山顶

(二)学习经历

  • 坎坷比赛路

  步入大学,我从一开始便对自己严格要求,早早的加入了15-234浙理-Mov堡实验室,并跟随实验室的学长学姐,参加了诸多专业相关的比赛,例如电子设计竞赛,机器人竞赛,工程训练大赛等,在这过程中,我充分利用专业课学习到的知识,将其在比赛中实践。


两年电赛通宵时所摄

   或许遗憾才是比赛的主旋律,当看到自己辛苦准备许久的作品没能在比赛场达到他应有的水平时,无力感不断地袭来,一次次的安慰自己下次会更好却不知道下次什么时候到来,尽管两年的比赛生涯不尽人意,我仍然享受每一个调车的夜晚,正如我的实验室好友DC所说,“着眼于比赛的过程,而不要着眼于结果”

电赛代码节选
import cv2
import numpy as np
import serial  
import time 


ser = serial.Serial('/dev/ttyAMA0',115200)
    
def side_judge(board_x,board_y):
    side = 0
    error_x = 0
    error_y = 0
    put_cx = 320 - 5
    put_cy = 240 + 20
    if board_x>=put_cx and board_y<=put_cy:
        side = 1
        error_x = board_x - put_cx
        error_y = put_cy - board_y
    if board_x<=put_cx and board_y<=put_cy:
        side = 2
        error_x = put_cx - board_x
        error_y = put_cy - board_y
    if board_x<=put_cx and board_y>=put_cy:
        side = 3
        error_x = put_cx - board_x
        error_y = board_y - put_cy
    if board_x>=put_cx and board_y>=put_cy:
        side = 4
        error_x = board_x - put_cx
        error_y = board_y - put_cy
        
    if error_x > 255:
        error_x = 255
    elif error_x < 0:
        error_x = 0
    if error_y > 255:
        error_y = 255
    elif error_y < 0:
        error_y = 0

    return side, error_x, error_y

def adaptiveThreshold(img,kernelsize):
    # 自适应阈值处理
    ratio = 0.018  # 自适应阈值比率
    img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    imgBlur = cv2.boxFilter(img, -1, (kernelsize, kernelsize))  # 盒式滤波器,均值平滑
    localThresh = img - (1.0-ratio) * imgBlur
    binaryBox = np.ones_like(img) * 255  # 创建与 img 相同形状的白色图像
    binaryBox[localThresh<0] = 0
    kSize = (3, 3)  # 卷积核的尺寸
    kernel = np.ones(kSize, dtype=np.uint8)  # 生成盒式卷积核
    imgDilate1 = cv2.dilate(binaryBox, kernel=kernel)  # 图像膨胀
    kSize = (4, 4)  # 卷积核的尺寸
    kernel = np.ones(kSize, dtype=np.uint8)  # 生成盒式卷积核
    imgErode1 = cv2.erode(imgDilate1, kernel=kernel)  # 图像腐蚀
    blur = cv2.medianBlur(imgErode1, 7)              # 中值滤波

    return blur

def circle_detect(img):
    count = 5
    total_x = 0
    total_y = 0
    circle_threshold = 60
    while(count > 0):
        img_draw = img.copy()
        gray = adaptiveThreshold(img,11)
        edges = cv2.Canny(gray, 50, 150)
        cv2.imshow("edges", edges)
        circles = cv2.HoughCircles(edges, method=cv2.HOUGH_GRADIENT,
                                dp=1, minDist=25, param1=100, param2=circle_threshold,
                                minRadius=80, maxRadius=120)
        if circles is not None:
            circles = np.uint16(np.around(circles))
            circle = circles[0, 0, :]
            cv2.circle(img_draw, (circle[0], circle[1]), circle[2], (0,255,0), 2)
            cv2.circle(img_draw, (circle[0], circle[1]), 2, (0, 0, 255), 3)
            cv2.imshow("image", img_draw)
            x, y = circle[0], circle[1]
            total_x = total_x + x
            total_y = total_y + y
            count -= 1
        else:
            if circle_threshold>10:
                circle_threshold-=10
            else:
                pass
            
    side, error_x, error_y = side_judge(int(total_x/5),int(total_y/5))
    print(side, error_x, error_y)
    return side, error_x, error_y
            
def color_detect(frame):
#-------------------HSV色域--------------------#
    # 红色色域
    lower_red = np.array([0, 100, 100])
    upper_red = np.array([60, 255, 255])
    lower_red2 = np.array([140, 100, 100])
    upper_red2 = np.array([255, 255, 255])

    # 绿色色域
    lower_green = np.array([60, 100, 100])
    upper_green = np.array([90, 255, 255])

    # 蓝色色域
    lower_blue = np.array([90, 100, 100])
    upper_blue = np.array([140, 255, 255])
#--------------------------------------------#
    kSize = (9, 9)  # 卷积核的尺寸
    kernel = np.ones(kSize, dtype=np.uint8)  # 生成盒式卷积核
    img = cv2.dilate(frame, kernel=kernel)  # 图像膨胀
    hsv_frame = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    height, width, _ = hsv_frame.shape
    frame = hsv_frame[0:height, 0:int(5*width/12)] 
    
    red_mask = cv2.inRange(frame, lower_red, upper_red)
    red_mask2 = cv2.inRange(frame, lower_red2, upper_red2)
    red_mask = cv2.bitwise_or(red_mask, red_mask2)
    green_mask = cv2.inRange(frame, lower_green, upper_green)
    blue_mask = cv2.inRange(frame, lower_blue, upper_blue)
    
    kernel = np.ones((5, 5), np.uint8)
    red_mask = cv2.morphologyEx(red_mask, cv2.MORPH_OPEN, kernel)
    green_mask = cv2.morphologyEx(green_mask, cv2.MORPH_OPEN, kernel)
    blue_mask = cv2.morphologyEx(blue_mask, cv2.MORPH_OPEN, kernel)
    
    red_pixels = cv2.countNonZero(red_mask)
    green_pixels = cv2.countNonZero(green_mask)
    blue_pixels = cv2.countNonZero(blue_mask)
    threshold = frame.shape[0] * frame.shape[1]  * (1/4)
    
    if red_pixels > threshold:
        print("red")
        return 1    #red
    
    elif green_pixels > threshold:
        print("green")
        return 2    #green
    
    elif blue_pixels > threshold:
        print("blue")
        return 3    #blue
    
    else:
        print("no color")
        return 0



#---------------------------主循环代码--------------------------#
cap = cv2.VideoCapture(0)
cap.set(3, 640)  
cap.set(4, 480)
side = 0
err_x = 0
err_y = 0
task = 0 
flag = 0

while True:
    ret, frame = cap.read()
    count = ser.inWaiting()
    if count > 0:
        rdata = ser.read(count)
        rdata = rdata.decode("UTF-8")
        print("收到的值为", rdata)
        if rdata == '1':
            # 任务1:识别颜色    
            cv2.imshow("image", frame)      
            color = color_detect(frame)
            sdata = bytearray([0x2C, 0x12, 0x01, color, 0, 0, 0 ,0xff])
            ser.write(sdata)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

        if rdata == '2':
            # 任务2:识别圆形轮廓
            cv2.imshow("image", frame)
            side, error_x, error_y = circle_detect(frame)
            sdata = bytearray([0x2C, 0x12, 0x02, 0, side, error_x, error_y ,0xff])
            ser.write(sdata)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        
cap.release()
cv2.destroyAllWindows()

  • 小白科研路

   比赛之余,我也积极参与科研项目,在长达一年的项目周期里,我也从代码零基础、实验零基础的小白逐渐成长为能够为别人答疑解惑的学长,并在自己的专业方向有了自己的理解。科研之于我的意义不仅仅在于提出创新、收获成果,更是磨砺心性、不断探索的一条道路,幸运的是,有许多师长为我指明方向,让我能够在这条路上找到一个前进的目标,我也相信,终有一天像我这样的小白也会拥有足以让自己骄傲的成绩。

(三)生活经历

  在生活中,我是一个乐观开朗的人,与人和善,说话坦率。我爱好旅游、摄影,喜欢记录生活中有趣的小事。我和同学师长都保持十分良好的关系,他们教会了我许多,不仅是专业知识,更是对未来、人生的看法。同时,我也热衷于与各种不同职业不同年龄的人聊天,倾听不同的声音了解不同的看法,这是我认识世界的一种方式,也是完善自我的一种方式,正如杨绛先生所说,“你读过的书,遇过的人,构成了你的人生格局”,理工科的学生并不应该终日在实验室度过,往外走走经常能够发现新的乐趣。

镇江旅游时所摄
结课后与马上退休的Julie老师合影
与室友一起吃烤肉

  不是每个人都有机会和自己的偶像合影,而我则是在一次偶然的机会追星成功。前不久去浙大找朋友时偶遇了东京奥运会女子平衡木项目的奥运冠军--管晨辰,于是便上前与之合照。

  尽管在后来和同学交谈炫耀的过程中,我发现并不是所有同学都听说过当年火出圈的“袋鼠摇”,她仍然是我非常崇拜的一名运动员。不仅仅因为她是奥运冠军,在她自己擅长的领域做到了最好,更因为她乐观、坚韧的性格所带来的无与伦比的个人魅力。退役后发福仍在网络平台分享生活招致的许多无端嘲讽,在自己曾经最擅长项目上今非昔比带来的巨大落差,我没法想象她是否也经历了自我内耗的煎熬,作为一个曾经的奥运冠军,这些压力在她身上愈发放大。尽管如此,她仍是选择坦然的面对,毫不掩饰的直面这些外人看来难以克服的心魔,这也为曾经迷茫的我带来了很多鼓励。

二、自我评估

(一)掌握的专业技能与知识

  • 学习并基本掌握电路原理、模电数电、自动控制原理等课程的内容;
  • 能够基于C语言实现对STC51、STM32、MSP430等型号单片机的开发;
  • 能够使用相关EDA完成对于原理图、PCB的绘制,并进行简单的电路仿真;
  • 了解Linux系统的基础操作,能够通过基本的命令行控制实现图像处理任务的移动端部署;
  • 熟悉Python语言进行机器视觉、深度学习项目的开发。
课设制作的雪花灯
实验所得的结果

(二)感兴趣的技术方向

  • 人工智能相关
  • 机器人学(ROS、SLAM等)
  • 操作系统相关

(三)缺乏的能力

  • 对于机械结构方面的认识较少,不擅长做硬件设计;
  • 缺少电力电子、电能转换等相关知识储备,对电的理解较浅;
  • 缺乏自制力与专注力,完成长周期任务的效率较低;
  • 英语能力较为薄弱。

三、对课程的展望

  在本学期的软件技术基础课中,我希望能够跟随杨老师以及助教老师完成所有的课程目标,积极认真的去对待每一次的作业并取得优异的成绩,并从本次课程中得到收获:

  1. 系统性学习软件技术的基础理论,结合实践案例与项目巩固所学,加深对于软件开发、测试维护等相关内容的理解;
  2. 通过小组合作培养团队协作能力,提升与他人沟通交流的能力,让自己的成果能够与别人的成果相配合,最终达到1+1>2的效果,也为未来进入企业打下基础;
  3. 通过课程安排与杨老师上课时的介绍,进一步了解相关行业的就业方面,熟悉现代软件开发的相关背景与实际操作内容。

  同时,我希望在课程实践中担当一个“学习者”与“引领者”的定位,通过自己不断的学习与巩固,了解课程相关内容与实践操作方法,并将自己所学到的内容分享给其他的同学,引领他们去更好的完成课程任务,这个过程不仅帮助了其他同学,也是对自己的提升。

posted @ 2024-09-16 23:02  作业本开小差  阅读(82)  评论(4编辑  收藏  举报