再看“笕实智慧校园”——作品的复盘[1]

这几个月因为学业繁重,加上准备省机器人竞赛的原因,没能经常写博客。

在学军的这几个礼拜,觉得自己还是学到了不少的。

如今,再看当年的笕实智慧校园工程(http://www.cnblogs.com/pityhero233/p/7246862.html),只觉得多了不少可以改进的地方。

一个基于python和pcduino的智慧校园系统,本着开(zhuang)源(bi)的精神可以用来借鉴。233。

运行在pcduino上的,需要搭配一些元件。

现在,接触到了各种板子。除了pcduino和现在已经被满大街地滥用的树莓派、arduino以外,像WiDo、DFRobot出的一些板子,64位arm的Pine64,6核高配置,价格两千多的Firefly RK3399,还有无线电的SDR Hackrf、LimeSDR等等。回头再看当年引以为豪的pcduino,觉得有些感慨。

p.s.上学铃声是个双和弦的《小星星》,虽然歌很简单,但是写死我了-_-
muse_dict ={‘.1‘=261.9,‘.2‘=293.7,‘.3‘=329.6,‘.4‘=349.2,‘.5‘=392.0,‘.6‘=440,‘.7‘=493.9,‘1‘=523.3,‘2‘=587.3,‘3‘=659.3,‘4‘=698.5,‘5‘=784,‘6‘=880,‘7‘=987.5,‘1.‘=1047,‘2.‘=1175,‘3.‘=1319,‘4.‘=1397,‘5.‘=1568,‘6.‘=1760,‘7.‘=1970}
blinkingI = [A]
#blinkingI = [Q,X,Q,X,T,X,T,X,Y,X,Y,X,T,X,X,X,R,X,R,X,E,X,E,X,W,X,W,X,Q]
blinkingII = [A,G,D,G,A,G,D,G,A,H,F,H,A,G,D,G,M,G,S,G,A,G,D,G,M,G,S,G,A,G,D,G,A]
for i in range(0,len(blinkingI)):
    dualsound(blinkingI[i],blinkingII[i],5,6,0.4)

这里的设计觉得虽然比较粗暴,但是效果还是可以的。虽然可以用外接音响直接放声音文件,但是蜂鸣器有效地降低了体积和成本,还可以隐藏到草皮下面,双和弦也算是一个惊喜吧。(笑

tempb = os.system(‘mkdir /var/log/apache2‘)
tempb = os.system(‘cd /var/log/apache2‘)
tempb = os.system(‘touch /var/log/apache2/access.log‘)
tempb = os.system(‘/etc/init.d/apache2 restart‘)
def ReadFile(filepath):
    file = open(filepath)
    try:
        tempa = file.read()
    finally:
        file.close()
    return tempa

这里是互联网的解决方案,非常的简单粗暴,python直接调用shell(后来证明是非常不好的习惯),暴力读取日志,简直无力吐槽。觉得自己能活到现在真是一个奇迹。

现在的话应该使用flask,代码风格应该是这样的:

from flask import Flask
import thread

app = Flask(‘test‘)

@app.route(‘/‘)
def hmain():
    printf("it works!")

def service():
    app.run()

thread.start_new_thread(service,())

digital_write(0,HIGH)
digital_write(0,LOW)
digital_write(7,LOW)
digital_write(10,LOW)
digital_write(0,HIGH)
digital_write(1,HIGH)

emmm,这是关闭所有电器.....应该使用一个enum枚举对象,这样更优雅(虽然记数字也可以实现

def facecomp(): # face recognization
    #print ‘start!‘
    cmd = ‘curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=jb0zKEEB2jiG2GMNt29Gej-GxNTPbeCM" -F "api_secret=5AHULy15PjagzVvnHLUa2ouVJpWCPHMZ" -F "face_token1=f216f8b56678831f6dc5720ae10f341f" -F "[email protected]"‘
    #print ‘here is the datas!‘
    result = os.popen( cmd ).read()
    print result
    #print result

    #print ‘here is the splited data:‘
    splresult = result.split(‘,‘)
    confidenceraw =  splresult[-1]
    confidencestr = confidenceraw[-7:-1]
    if check(confidencestr):
        confidence = string.atof(confidencestr)
    else:
        confidence = 0
    print confidenceraw,confidencestr,confidence,‘.‘
    if confidence >= 70:
        return True
    else:
        return False

这是人脸识别的代码,调用了旷视科技的Face++人工智能平台,实际上就是个HTTP Post请求。又是老套路,一切丢给shell处理。

如今应该使用urllib和requests做。甚至可以自己尝试使用tensorflow训练rcnns,调用opencv3.4新增的cv2.dnns特性进行计算。

def ScreenCali(str=None):
    timecur = time.strftime(ISOTIME,time.localtime())
    mediumprint(‘HHHHHHHHHHHHHHHH‘)
    mediumprint(timecur)
    #temp = readTemp() & ‘ C‘
    #mediumprint(temp)
    mediumprint(str)

最让人吐槽的是这段了.....强行用console做了一个ui。

(记得当年为了做ui,还在linux上用wine跑了一个vb6..........不堪回首)

如今应该使用Qt Widgets或者Qt Quick+Qml写个UI才是。



最后,还有安卓程序。

没有了截图,只记得是用app inventor写的(逃

现在省机器人比赛项目的安卓客户端是用java写的。



总结起来,感觉今年还是有很大进步的。

  • 粗略学习了Qt Widgets和它的槽机制等
  • 在信息竞赛中学习了基于C++的数据结构与算法
  • C++/Python/C/Lua/bash/Qml/Lisp等各种语言都有了深浅不同的涉足,从此再也不敢说“我会C++”了
  • 对linux有了远比一年前深的认识,包括GNU套件(vim cmake make等)、文件系统、硬件等,但是内核方面仍然是空白
  • Qt Quick在安卓的开发进行了粗略学习,并及时地认识到Qt on Android是巨坑,及时跳坑
  • Java入门和android studio的开发
  • 高等数学和机器学习理论的学习,虽然只是皮毛,但是比起初中已有更深的认识
  • 学习了tensorflow和YOLO(You Only Look Once Object Detection)等物体识别框架,掌握了tensorflow的基本原理和结构,学会了自己制作pascal voc数据集
  • 无线电方面的知识,包括各种无线信号的常用频段、GPS原理、基站定位原理和GSM原理,尝试了用摩托罗拉手机制作伪基站(虽然没有成功)
  • 计算机网络相关知识,以及大学各类计算机相关必修书,正在学习

嗯,非常满意。

原文地址:https://www.cnblogs.com/pityhero233/p/8586231.html

时间: 2024-07-31 18:20:38

再看“笕实智慧校园”——作品的复盘[1]的相关文章

智慧校园性能优化总结

                                                           智慧校园性能优化总结                                                                                                                                紫薇真人李万鸿   智慧校园性能优化第一阶段已经胜利完成,通过优化,响应速度普遍提升几十倍,大家在工作中探

校园信息化在建设智慧校园中的作用

信息化是当今世界发展的大趋势,是推动教育教学变革的重要力量.加快推进高校信息化建设,提高院校管理水平,已成为当前教育教学建设中重要而迫切的核心任务之一.本文将重点分析校园信息化在建设智慧校园中的作用.(一)建设智慧教室将学校行课教室和正规实训室建成基于物联网技术集智慧教学(智慧课堂).师生考勤.环境智慧调节.视频监控及远程控制于一体的新型现代化智慧教室50间.智慧实作室35间:建成利用虚拟技术模拟教学场景的3D智慧教室1间,建成新型创客智慧实训室1间.(二)建设智慧门禁建立一体化出入管理系统,涵

机房收费系统合作——再看数据库设计

机房合作我负责了最简单的D层,接口层,工厂层.反正D层是我来写,于是数据库索性也就顺便设计了.已经是第三次敲机房收费系统了,每次都是相隔半年左右吧.需求搞得透透的了,数据库也就好设计了.基本跟第二次没什么大的区别,就是把Student表和Card表分开了. 重构的时候,我的数据库几乎什么都用到了:事务,存储过程,触发器,视图,联合查询等等.所以,这次设计数据库还是SO Easy的..并且,为了让婵婵和牛迁迁师哥写的方便,我把组合查询都写成了存储过程!!!!费了一番功夫,但是D层简单了不少.还记得

再看GS线程

再看GS线程 void GameServer::ProcessThreadTry() { int nCount = 0; packet rcvPkt; rcvPkt.data = new char[1024 * 100]; //该事件工厂主要创建了两个定时器1.livemgr的检测(即是否是有效的连接)2.道具帮会差异更新数据的获取即定时从道具帮会容器中获取差异需要保存到数据库的这个数据 //3.释放队列的处理,现在玩家下线不是直接把channel删除掉而是放到释放队列中等没有数据库访问时在删除

再看数据库——(2)视图

概念 *是从用户使用数据库的观点来说的. *从一个或多个表(视图)中导出来的 *一个虚表,或者说查询表 为什么要用视图呢? 一是简单,看到的就是需要的.视图不仅可以简化用户对数据的理解,也可以简化他们的操作.那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件. 二是 安全,通过视图用户只能查询和修改他们所能见到的数据,但不能授权到数据库特定行和特定的列上.通过视图,用户可以被限制在数据的不同子集上:使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后

再看ftp上传文件

前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在本地测试程序上传到ftp服务器一点问题都没有,奇怪的是当发布Web和ftp到同一个IIS下,上传文件时程序直接卡死,然后页面卡死,后来我又发现把Web和ftp分开发布在两台机器上问题又得到解决,所以当时放弃了这个方案. 再看ftp上传文件 前几天偶然看到Wolfy写到一个项目总结,其中提到了用Ser

2015第43周六再看长征

今天从网上看到习大大推荐看的十三本书信息,然后先听了里面的长征,然后再看了<长征>电视,把思绪带回了70多年前,也更真切的感受到长征的重要意义.截取里面的几个事件分析下自己的感受: 1.李德博古专权导致了第五次反围剿和湘江战役的惨败,尤其是血染湘江的悲壮场景,红军从8w多损失到了3w多,多少革命战士英勇牺牲.这里有几个问题(1)为什么李德博古会专政,其它人会让他们专政?他们是共产国际派来的,代表苏联成功经验,受过正规军事训练,代表理论文化先进,所以被推崇.(2)为什么会有这两次的惨败.血流成河

再看Ajax

再回顾Ajax相关的内容,再次梳理学习还是很有必要的,尤其是实际的开发中,ajax更是必不可少,仔细学习以便避免不必要的错误. 文章导读: --1.使用XMLHttpRequest---------- 1.1 必备知识点 1.2 send()方法 1.3  再看CORS --2.HTTP请求和响应---------------- 2.1 Request Header中的参数 2.2 Response Header中的参数 2.3 GET请求和POST请求的区别 --3.jQuery中的Ajax-

再看GS接包过程

再看GS接包过程 bool GameServer::ProcessLoop(packet& rPkt) { if(false == m_spDataLayer->Recv(rPkt)) return true;//没数据了 if(rPkt.is_data) { if(!rPkt.data) return false; GameChannel* pGC = m_vecChannel[rPkt.channel_id]; if(pGC) pGC->OnReceiveData(rPkt.dat