首页 文章 精选 留言 我的

精选列表

搜索[自动化测试框架],共10000篇文章
优秀的个人博客,低调大师

周博通 | 阿里语音AI入选MIT“全球十大突破技术”;阿里云率先达成国家绿色数据中心标准;iOS协程开发框架coobjc开源

阿里妹导读:雪融化了,春天还会远吗? 天气渐暖,“惊蛰”将至,春雷渐来,冬眠的动物们也将陆续活动开,年后第一期的周博通也整装再发、重新上线啦,希望你会喜欢。 周 博 通 中国唯一上榜公司!阿里巴巴语音AI入选“全球十大突破性技术” 近日,阿里巴巴语音AI技术成功入选MIT2019年“全球十大突破性技术”。MIT认为,阿里巴巴已拥有世界一流的AI语音技术,可以完成复杂的人类对话功能,甚至可读懂人类的潜在意图。阿里巴巴也是唯一上榜的中国科技公司。 MIT对阿里语音助手技术的相关报道 MIT(《麻省理工科技评论》)“十大突破性技术”是全球科技领域的权威发布。它认为,之前出现的不少AI产品并没有真正做到智能,但近期的技术进展正在快速增加AI助手的功能,更智能的AI助手已经面世。阿里巴巴的AI语音助手,可以帮助消费者通过电话协调菜鸟包裹递送,还可以

优秀的个人博客,低调大师

知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?

一直以来,我使用的方法都是shiqiyu在opencvchina上面提供的引入directshow,并且采用cvvimage和cameraDs的方法。这个方法虽然在xp/win7/win8下面都能够成果使用,但是一直以来我都没有动机去深入看一看这个方法。这次在知乎上面看到 jie wu 提出的“将Opencv窗口添加到PictureControl”中的方法,感到思路很好,进行了具体实现 http://pan.baidu.com/s/1nuixdhR 具体可以看代码,我帖一些主要代码 void CMfcRibbonTemplateView : :OnInitialUpdate() { CFormView : :OnInitialUpdate(); GetParentFrame() - >RecalcLayout(); ResizeParentToFit(); //根据控件的大小设置初始帧的大小 CRect rect; GetDlgItem(IDC_PBSRC) - >GetClientRect( &rect ); // 获取控件尺寸位置 m_lframe = Mat : :zeros(rect.Height(),rect.Width(),CV_8UC3); GetDlgItem(IDC_PBSRC) - >GetClientRect( &rect ); m_rframe = Mat : :zeros(rect.Height(),rect.Width(),CV_8UC3); //绑定Mat到Picturebox上去 namedWindow( "src",WINDOW_AUTOSIZE); HWND hWnd = (HWND)cvGetWindowHandle( "src"); HWND hParnt = : :GetParent(hWnd); : :SetParent(hWnd,GetDlgItem(IDC_PBSRC) - >m_hWnd); : :ShowWindow(hParnt,SW_HIDE); namedWindow( "dst",WINDOW_AUTOSIZE); hWnd = (HWND)cvGetWindowHandle( "dst"); hParnt = : :GetParent(hWnd); : :SetParent(hWnd,GetDlgItem(IDC_PBDEST) - >m_hWnd); : :ShowWindow(hParnt,SW_HIDE); } void CMfcRibbonTemplateView : :OnSize(UINT nType, int cx, int cy) { CFormView : :OnSize(nType, cx, cy); CWnd * pwndsrc = GetDlgItem(IDC_PBSRC); CWnd * pwnddst = GetDlgItem(IDC_PBDEST); //计算出长宽,这里的长宽是按照比例的,图像居中显示 int iblank = 15; //边界空余 int iwidth = cx / 2 -iblank * 2; int iheight =( int)(iwidth * 0. 75); if (pwndsrc - >GetSafeHwnd() && pwnddst - >GetSafeHwnd()){ pwndsrc - >MoveWindow(iblank,(cy -iheight) * 0. 4,iwidth,iheight); pwnddst - >MoveWindow(cx / 2 +iblank,(cy -iheight) * 0. 4,iwidth,iheight); } } void CMfcRibbonTemplateView : :showimage(Mat & src, UINT ID) { if (src.empty()) return; CRect rect; Mat dst = src.clone(); GetDlgItem(ID) - >GetClientRect( &rect ); // 获取控件尺寸位置 if (dst.channels() == 1) cvtColor(dst, dst, CV_GRAY2BGR); resize(dst,dst,Size(rect.Width(),rect.Height())); imshow( "src",dst); } 总体感到jie wu 提出的方法,对于解决比较简单的问题,的确是不错的(我记得halcon生成能够被csharp调用的代码的时候,好像采用的就是类似的方法)。但是它本身存在以下问题: 1、在窗体初始化的时候会有一个黑框弹出来,应该是nameWindow的效果; 2、在没有图片的时候,会自动将Picturebox的背景绘制成为灰色,而且好像不好控制; 3、仅仅是imshow还不能完成全部的调用,比如控件的大小可能还会变化,那么就需要用showimage重新进行封装。 如果加上这些7788的东西,那么最后调用起来,也是比较复杂的。 但是jie wu的方法有一个天生的优点,就是可以调用high gui的callback机制,这个是非常强的东西,能够省不少麻烦事情。 这里只是我粗浅的认识,若有不对之处,欢迎批评指正。 最后说一句,其实看了一些opencv自己的代码,它里面有很多地方就是iplimage和mat相互转换的,很多使用mat接口的函数,只不过是把以前的使用iplimage的函数重新包装了一次。opencv毕竟是一个开源的类库,还有很多地方需要大家一起做得更好。 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

优秀的个人博客,低调大师

8-51单片机ESP8266学习-AT指令(测试TCP服务器--51单片机程序配置8266,做自己的手机TCP客户端发信息给单片机控制小灯的...

http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接:https://pan.baidu.com/s/10MxI8-Q33-M_R2WEHqEi1A密码:j1sz 先做手机的,然后做C#的 详细点的可以看我这篇文章,请参考着这篇看这篇文章,这篇文章会解决一些细节问题 http://www.cnblogs.com/yangfengwu/p/5212570.html 咱们不做很复杂的直接越简单越好,就做成这样 先编译一下 不用管,后期的话咱会用一下 最后做成这样子 发现还是有点大.. 把像素低的放到像素高的里面图片显示出来会缩小,把像素高的放到像素低的里面图片显示出来会放大 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageViewLamp = (ImageView) findViewById(R.id.imageView1); switchLamp = (Switch) findViewById(R.id.switch1); switchLamp.setOnCheckedChangeListener(switchLamplistener);//设置SWITCH的状态改变事件 } private OnCheckedChangeListener switchLamplistener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub // Toast.makeText(getApplicationContext(), isChecked+"", 500).show(); if (isChecked) {//切换图片 imageViewLamp.setImageResource(R.drawable.ledon); } else { imageViewLamp.setImageResource(R.drawable.ledoff); } } }; 现在做点击连接按钮就连接服务器 刚看到............... 有点迫不及待的想试一试腾讯云了, 下面做的是:点击连接按钮,连接TCP服务器,连接上以后启动数据接收任务,因为数据接收任务可以判断是不是和服务器断开了连接 然后按钮显示"断开",如果意外断开了连接也显示断开.... public class MainActivity extends Activity { ImageView imageViewLamp;//灯的图片 Switch switchLamp;//灯的控制开关 EditText editTextIPAdress,editTextPort;//ip地址和端口号的编辑框 Button buttonConnect;//连接按钮 Socket socket;//cocket boolean ConnectFlage = false;//连接标志,控制按钮显示连接和断开 ThreadConnectService threadConnectService = new ThreadConnectService();//建立一个连接任务的变量 InputStream inputStream;//获取输入流,可以用来判断有没有断开连接 ThreadReadData threadReadData = new ThreadReadData();//接收数据的任务的变量 boolean threadReadDataFlage = false;//接收数据任务一直运行控制 byte[] ReadBuffer = new byte[1024];//存储接收到的数据 int ReadBufferLengh = 0;//接收到的数据个数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextIPAdress = (EditText) findViewById(R.id.editText1); editTextPort = (EditText) findViewById(R.id.editText2); buttonConnect = (Button) findViewById(R.id.button1); buttonConnect.setOnClickListener(buttonConnectClick); imageViewLamp = (ImageView) findViewById(R.id.imageView1); switchLamp = (Switch) findViewById(R.id.switch1); switchLamp.setOnCheckedChangeListener(switchLamplistener); } /*指示灯控制开关*/ private OnCheckedChangeListener switchLamplistener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { imageViewLamp.setImageResource(R.drawable.ledon); } else { imageViewLamp.setImageResource(R.drawable.ledoff); } } }; /*按钮点击连接事件*/ private OnClickListener buttonConnectClick = new OnClickListener() { @Override public void onClick(View v) { if (ConnectFlage) { try { threadConnectService.start();//启动连接任务 } catch (Exception e) //预防任务还没关闭呢又点击开始 { threadConnectService.run(); } } else { ConnectFlage = true; buttonConnect.setText("连接"); try { socket.close();//关闭socket inputStream.close();//关闭数据流 } catch (Exception e) { // TODO: handle exception } } } }; /** * 连接服务器的任务 * @author yang * */ class ThreadConnectService extends Thread { public void run() { InetAddress ipAddress; try { ipAddress = InetAddress.getByName(editTextIPAdress.getText().toString());//获取IP地址 int port =Integer.valueOf(editTextPort.getText().toString());//获取端口号 socket = new Socket(ipAddress, port);//创建连接地址和端口 inputStream = socket.getInputStream();//获得通道的数据流变量 threadReadDataFlage = true;//一直接收数据 try { threadReadData.start(); } catch (Exception e) {//预防任务还没关闭呢又点击开始 threadReadData.run(); } runOnUiThread(new Runnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用 public void run() { ConnectFlage = false; buttonConnect.setText("断开"); Toast.makeText(getApplicationContext(), "连接成功", 500).show(); } }); } catch (Exception e) { e.printStackTrace(); } } } /** * 接收数据的任务 * @author yang * */ class ThreadReadData extends Thread { public void run() { while (threadReadDataFlage) { try { ReadBufferLengh = inputStream.read(ReadBuffer);//服务器断开会返回-1 if (ReadBufferLengh == -1) { threadReadDataFlage = false; runOnUiThread(new Runnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用 public void run() { ConnectFlage = true; buttonConnect.setText("连接"); Toast.makeText(getApplicationContext(), "与服务器断开连接", 500).show(); } }); } } catch (Exception e) { // TODO Auto-generated catch block Log.e("error", ReadBufferLengh+""); e.printStackTrace(); } } } } /** 当活动(界面)不再可见时调用 */ @Override protected void onStop() { threadReadDataFlage = false;//结束接收数据任务 super.onStop(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 忘了说一件事情....加权限 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yfw456.tcpclientdemo" android:versionCode="1" android:versionName="1.0" > <!-- 获取手机信息权限 --> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>" <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"> </uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 我把上面做的打包了 好现在接着写发数据(控制灯的亮灭) public class MainActivity extends Activity { ImageView imageViewLamp;//灯的图片 Switch switchLamp;//灯的控制开关 EditText editTextIPAdress,editTextPort;//ip地址和端口号的编辑框 Button buttonConnect;//连接按钮 Socket socket;//cocket boolean ConnectFlage = true;//连接标志,控制按钮显示连接和断开 ThreadConnectService threadConnectService = new ThreadConnectService();//建立一个连接任务的变量 InputStream inputStream;//获取输入流,可以用来判断有没有断开连接 OutputStream outputStream;//获得输出流 ThreadReadData threadReadData = new ThreadReadData();//接收数据的任务 ThreadSendData threadSendData = new ThreadSendData();//发送数据的任务 boolean threadReadDataFlage = false;//接收数据任务一直运行控制 boolean threadSendDataFlage = false;//接收数据任务一直运行控制 byte[] ReadBuffer = new byte[1024];//存储接收到的数据 byte[] SendBuffer = new byte[1024];//存储发送的数据 int ReadBufferLengh = 0; int SendDataCnt = 0;//控制发送数据的个数 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editTextIPAdress = (EditText) findViewById(R.id.editText1); editTextPort = (EditText) findViewById(R.id.editText2); buttonConnect = (Button) findViewById(R.id.button1); buttonConnect.setOnClickListener(buttonConnectClick); imageViewLamp = (ImageView) findViewById(R.id.imageView1); switchLamp = (Switch) findViewById(R.id.switch1); switchLamp.setOnCheckedChangeListener(switchLamplistener); } /*指示灯控制开关*/ private OnCheckedChangeListener switchLamplistener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { imageViewLamp.setImageResource(R.drawable.ledon); SendBuffer[0] = (byte) 0xaa; SendBuffer[1] = 0x55; SendBuffer[2] = 0x02; SendBuffer[3] = (byte) 0xff; } else { imageViewLamp.setImageResource(R.drawable.ledoff); SendBuffer[0] = (byte) 0xaa; SendBuffer[1] = 0x55; SendBuffer[2] = 0x02; SendBuffer[3] = 0x00; } SendDataCnt = 4;//控制发送数据的个数 } }; /*按钮点击连接事件*/ private OnClickListener buttonConnectClick = new OnClickListener() { @Override public void onClick(View v) { if (ConnectFlage) { try { threadConnectService.start();//启动连接任务 } catch (Exception e) //预防任务还没关闭呢又点击开始 { threadConnectService.run(); } } else { ConnectFlage = true; threadSendDataFlage = false;//关掉发送任务,预防产生多的任务 threadReadDataFlage = false;//关掉接收任务,预防产生多的任务 buttonConnect.setText("连接"); try { socket.close();//关闭socket inputStream.close();//关闭数据流 } catch (Exception e) { // TODO: handle exception } } } }; /** * 连接服务器的任务 * @author yang * */ class ThreadConnectService extends Thread { public void run() { InetAddress ipAddress; try { ipAddress = InetAddress.getByName(editTextIPAdress.getText().toString());//获取IP地址 int port =Integer.valueOf(editTextPort.getText().toString());//获取端口号 socket = new Socket(ipAddress, port);//创建连接地址和端口 inputStream = socket.getInputStream();//获得通道的数据流 outputStream = socket.getOutputStream();//获得通道的输出流 threadReadDataFlage = true;//一直接收数据 threadSendDataFlage = true;//一直循环的判断是否发送数据 try { threadReadData.start(); } catch (Exception e) {//预防任务还没关闭呢又点击开始 threadReadData.run(); } try { threadSendData.start(); } catch (Exception e) { threadSendData.run(); } runOnUiThread(new Runnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用 public void run() { ConnectFlage = false; buttonConnect.setText("断开"); Toast.makeText(getApplicationContext(), "连接成功", 500).show(); } }); } catch (Exception e) { e.printStackTrace(); } } } /** * 接收数据的任务 * @author yang * */ class ThreadReadData extends Thread { public void run() { while (threadReadDataFlage) { try { ReadBufferLengh = inputStream.read(ReadBuffer);//服务器断开会返回-1 if (ReadBufferLengh == -1) { threadSendDataFlage = false;//关掉发送任务,预防产生多的任务 threadReadDataFlage = false;//关掉接收任务,预防产生多的任务 SendDataCnt = 0;//清零发送的个数 ConnectFlage = true; runOnUiThread(new Runnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用 public void run() { buttonConnect.setText("连接"); Toast.makeText(getApplicationContext(), "与服务器断开连接", 500).show(); } }); } } catch (Exception e) { // TODO Auto-generated catch block Log.e("error", ReadBufferLengh+""); e.printStackTrace(); runOnUiThread(new Runnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用 public void run() { buttonConnect.setText("连接"); Toast.makeText(getApplicationContext(), "与服务器断开连接", 500).show(); } }); ConnectFlage = true; threadSendDataFlage = false;//关掉发送任务,预防产生多的任务 threadReadDataFlage = false;//关掉接收任务,预防产生多的任务 SendDataCnt = 0;//清零发送的个数 } } } } /** * 发送数据任务 * @author yang * */ class ThreadSendData extends Thread { public void run() { while (threadSendDataFlage) { if (SendDataCnt>0) //要发送的数据个数大于0 { try { outputStream.write(SendBuffer,0,SendDataCnt);//发送数据 SendDataCnt = 0;//清零发送的个数 } catch (Exception e) { runOnUiThread(new Runnable() {//修改界面的UI最好用Handle,这里力求简单,下几节再用 public void run() { buttonConnect.setText("连接"); Toast.makeText(getApplicationContext(), "与服务器断开连接", 500).show(); } }); ConnectFlage = true; threadSendDataFlage = false;//关掉发送任务,预防产生多的任务 threadReadDataFlage = false;//关掉接收任务,预防产生多的任务 SendDataCnt = 0; } } } } } /** 当活动(界面)不再可见时调用 */ @Override protected void onStop() { threadReadDataFlage = false;//结束接收数据任务 threadSendDataFlage = false;//结束发送数据任务 SendDataCnt = 0; super.onStop(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 发送数据是写在了一个任务里面 整体的源码 本来想这一节也写好C#的,不过感觉写的够多的了,所以C#的放到下一节 下一篇 http://www.cnblogs.com/yangfengwu/p/8785516.html

优秀的个人博客,低调大师

基于 YOLOv8 的目标检测与可视化平台 基于深度学习框架YOLOV8水面垃圾智能检测系统 环保监测、智慧城市、无人船巡检等场景

智慧巡检-基于YOLOv8的水面垃圾检测系统,包括【全部源码完整标注的数据集+训练好的模型+训练结果项目运行教程】内含 3600 张数据集,包括 [‘can’, ‘foam’, ‘plastic’, ‘plastic bottle’, ‘unknow’],5 类本项目已经训练好模型,配置成功环境可直接使用,运行效果项目介绍:软件:Pycharm+Anaconda(或者VSCode+Anaconda)环境:python3.9 opencv-python PyQt5 ultralytics torch1.9等文件:①完整程序文件(.py等)②UI界面源文件、图标(.ui、.qrc、.py等)③数据集图片,项目运行教程(.jpg、.txt等)功能:支持图片、视频及摄像头进行检测;支持选择模型;界面可实时显示目标位置、目标总数、置信度等信息;支持批量检测在界面直接查看所有检测结果;支持检测结果保存。①选择单张图片或者图片文件夹进行识别②选择视频文件进行识别③调用本地摄像头进行识别④自定义置信度,IOU阈值⑤选择显示标签和原图⑥选择检测模型⑦查看批量检测每一张检测结果基于 YOLOv8 的水面垃圾检测系统 的:✅ 结构化技术解决方案文档(无图版)✅ 最简易完整代码实现(可直接运行)✅ 配套说明:环境、数据集、模型、UI、功能全覆盖

优秀的个人博客,低调大师

如何通过小程序多端框架,让一个小程序同时运行在iOS、安卓、鸿蒙以及PC客户端,实现一次开发多端运行的效果

现在一个业务同时覆盖 iOS、安卓、鸿蒙和 PC,已经不算少见。客户查询、内容专区、工单处理、员工服务这些功能,在四类客户端里做的事情差不多,背后连接的也是同一套业务系统,但开发时经常会落进四个工程:移动端各写一套,鸿蒙再做适配,PC 端重新处理窗口和键鼠交互。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册