AI 60 年发展史,这片蓝海为什么没有早进入?

640?wx_fmt=gif

640?wx_fmt=jpeg

2017年~2018年人工智能大火,你会发现,跟朋友聊天不谈人工智能,聊天的bigger都上不去。

从行业本身来说,随着人工智能科技逐渐的融入到我们的生活里,无论是无人超市,刷脸识别等AI已成为现在热门的话题之一,同时人工智能领域的高薪水也频频吸引着我们的眼球。

但是目前火爆的AI,会不会像Android和iOS一样,五年后归于平淡?转型AI真的有必要吗?

一、CSDN三倍速定律透过技术社区看未来趋势

技术人员是行业创新的原动力,他们是最早掌握技术动态的那群人。为什么AI变得这么热门?大家看Gartner报告就会发现,很多热门技术最终都是昙花一现。什么技术才是真正的革命?其实我们可以透过开发者社区的动态来进行预测,这也是我提出来的“三倍速定律”。

640?wx_fmt=png

比如未来20年是AI改变世界的20年,这是大家的共识,但实际上AI已经60多年的历史了。2012 年深度学习在ImageNet比赛上取得重大突破之后,2013年CSDN上机器学习和深度学习的文章数量就出现了大幅增长,虽然大众媒体没有太多感知,但开发者已经感知到了这点。2016年大众媒体开始感知到AI,使得AI的关注度迅速提高,CSDN上深度学习的文章又涨了3倍。

从投资和创业的角度来说,投资人应该在2013年进场,创业者应该也在2013年开始去做,像Face++、今日头条等都是在那个时间点出现的。为什么人工智能的技术突破可以通过技术社区来预先感知?因为只有开发者真正掌握这门技术,大众才能有体验到更多的应用,然后才会有感知。

人工智能学习路线+实战训练

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

二、AI工程师需要具备怎样的技术能力

01:基础开发能力

所谓算法工程师,首先需要是一名工程师,那么就要掌握所有开发工程师都需要掌握的一些能力。

02:概率和统计基础

概率和统计可以说是机器学习领域的基石之一,从某个角度来看,机器学习可以看做是:建立在概率思维之上的,一种对不确定世界的系统性思考和认知方式。

03:开发语言和开发工具

近年来, Python 可以说是数据科学和算法领域比较火的语言,主要原因是它使用门槛低,上手容易,具有着完备的工具生态圈,同时各种平台对其支持也比较好。但是在模型训练方面,有一些更加专注的工具可以给出更好的训练精度和性能。

04:机器学习理论

虽然现在开箱即用的开源工具包越来越多,但并不意味着算法工程师就可以忽略机器学习基础理论的学习和掌握。

AI人才需求结构:

640?wx_fmt=png

来源:《AI 技术人才成长路线图V1.0》

基于此背景,CSDN学院也紧随CSDN-AI背景,开设了《人工智能工程师》4个月学习计划。内容包含:数学/机器学习/深度学习/工业级项目。

咨询CSDN小姐姐

详询课程+618限时1500元优惠福利

640?wx_fmt=jpeg

CSDN学院AI实训营注重培养扎实的基础理论和项目实战,AI工程师实训营课程目录摘取:

640?wx_fmt=png

咨询CSDN小姐姐

详询课程+618限时1500元优惠福利

640?wx_fmt=jpeg

CSDN实训营提供以下服务:

1、每周直播+直播知识点大串讲

2、社群助教+导师+班主任定期答疑服务

三、为什么选择CSDN学院?

相比于其他学习班,CSDN学院有着自己的服务体系和课程质量管理,因为学习任何一种编程语言,都需要专业的导师、系统的课程、实战演练项目和学习辅导,这不仅能节省大量时间,还能保证不会半途而废:

全程实战案例,从机器学习原理到推荐系统实现,从深度学习入门到图像语义分割及写诗机器人,再到工业级实战项目。

有专助教来跟踪学习进度,并根据你的数学和编程基础来制定学习计划。实战讲师在计算机视觉的产业界和学术界分别都有着深厚的经验,产、学、研结合紧密。

咨询CSDN小姐姐

详询课程+618限时1500元优惠福利

640?wx_fmt=jpeg

640?wx_fmt=gif点击阅读原文,了解更多~

展开阅读全文

为什么没有进入键盘钩子函数?

11-18

以下我的钩子dll源码,在InitInstance时通过Inithook函数调用我安装了全局的键盘钩子,可是我在按键时并没有进入钩子函数KeyboardProc,好像只有在安装键盘钩子的窗口中按键,才进入钩子函数。可是我明明装的是全局键盘钩子呀...rn,谁能告诉我为什么?rn// Hook.cpp : 定义 DLL 的初始化例程。rn//rnrn#include "stdafx.h"rn#include "Hook.h"rn#include rnrn#ifdef _DEBUGrn#define new DEBUG_NEWrn#endifrnrn// CHookApprnrnusing namespace std;rnrntypedef struct tagHotKeyRegEntryrnrn HWND hWnd;rn UCHAR ucVirtualKey;rn UCHAR ucMaskKey;rnHotKeyRegEntry;rnrn#pragma data_seg("shareddata")rn HHOOK g_hKeyboardHook = NULL; //键盘钩子句柄rn HHOOK g_hMouseHook = NULL; //鼠标移动消息钩子rn int g_nHookCount = 0; //dll挂接的程序数rn list g_LstHKEntries; //要不要进行别的初始化操作?rn HWND g_hWndCatcher = NULL; //要捕捉鼠标的窗口句柄rn#pragma data_seg()rnrn//线程句柄rnHINSTANCE g_hIns;rnrnBEGIN_MESSAGE_MAP(CHookApp, CWinApp)rnEND_MESSAGE_MAP()rnrnrn// CHookApp 构造rnrnCHookApp::CHookApp()rnrnrnrn// 唯一的一个 CHookApp 对象rnrnCHookApp theApp;rnrn//注册的键盘钩子函数rnLRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)rnrn if (HC_ACTION == nCode) //只有在GetMessage时才调用rn rn bool l_fKeyUp = ((lParam & 0xc0000000) == 0xc0000000); //按键松开rn bool l_fKeyDown = ((lParam & 0xc000ffff) == 1);//按键按下rn if (!l_fKeyDown && !l_fKeyUp) //如果不是按键松开或按下时不处理rn rn return ::CallNextHookEx(g_hKeyboardHook,nCode,wParam,lParam);rn rnrn //检测出所有按键状态rn bool l_fVKs[256];rn l_fVKs[0] = true;rnrn int l_i;rn for (l_i = 1; l_i < 256; ++l_i)rn rn l_fVKs[l_i] = ((::GetKeyState(l_i) & 0x8000) == 0x8000);rn rnrn //设置掩码位状态rn UINT l_uiMask = 0;rn l_uiMask |= l_fVKs[VK_CONTROL] ? MK_CONTROL : 0;rn l_uiMask |= l_fVKs[VK_SHIFT] ? MK_SHIFT : 0;rn l_uiMask |= l_fVKs[VK_MENU] ? MK_ALT : 0;rnrn //循环检查rn list::iterator l_itr;rnrn for (l_itr = g_LstHKEntries.begin(); l_itr != g_LstHKEntries.end(); ++l_itr)rn rn if (!::IsWindow(l_itr->hWnd)) //如果不是窗口,应该即刻从列表中删除rn rn g_LstHKEntries.erase(l_itr);rn rnrn if (((l_fKeyDown && l_itr->ucMaskKey == -1) || l_itr->ucMaskKey == l_uiMask) rn && ((l_itr->ucVirtualKey == 0 && l_fKeyDown) || (l_itr->ucVirtualKey != 0 && l_fVKs[l_itr->ucVirtualKey])))rn rn //符合条件,向窗口发送消息rn ::PostMessage(l_itr->hWnd,WM_HOTKEY,0,0);rn rn rn rnrn return ::CallNextHookEx(g_hKeyboardHook,nCode,wParam,lParam);rnrnrnrn//注册的鼠标钩子函数rnLRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)rnrn if (nCode == HC_ACTION) //只有GetMessage时才执行钩子函数rn rn MOUSEHOOKSTRUCT* l_lpMHS = (MOUSEHOOKSTRUCT*)lParam;rn if (::IsWindow(g_hWndCatcher)) //是窗口,就向该窗口发送消息rn rn WPARAM l_dwMaskBits = 0;rn l_dwMaskBits |= ((::GetKeyState(VK_CONTROL) & 0x8000) ? MK_CONTROL : 0);rn l_dwMaskBits |= ((::GetKeyState(VK_SHIFT) & 0x8000) ? MK_SHIFT : 0);rn l_dwMaskBits |= ((::GetKeyState(VK_MENU) & 0x8000) ? MK_ALT : 0);rn ::ScreenToClient(g_hWndCatcher,&l_lpMHS->pt);rn ::PostMessage(g_hWndCatcher,wParam,l_dwMaskBits,MAKELPARAM((short)l_lpMHS->pt.x,(short)l_lpMHS->pt.y));rn rn else //不是窗口,则卸载钩子rn rn ::UnhookWindowsHookEx(g_hMouseHook);rn g_hMouseHook = NULL;rn g_hWndCatcher = NULL;rn rn rnrn return ::CallNextHookEx(g_hMouseHook,nCode,wParam,lParam);rnrnrnbool InitHook()rnrn //如果已经挂接rn if (NULL != g_hKeyboardHook)rn rn ++g_nHookCount;rn return TRUE;rn rnrn //尚未挂接rn g_hKeyboardHook = ::SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hIns,0);rnrn if (NULL != g_hKeyboardHook)rn rn ++g_nHookCount;rn return true;rn rn elsern rn return false;rn rnrnrnbool UnInitHook()rnrn if (g_nHookCount > 1)rn rn --g_nHookCount;rn return TRUE;rn rnrn //仅有一个hook时卸载则直接卸载HOOKrn bool l_fUnhooked = (::UnhookWindowsHookEx(g_hKeyboardHook) == TRUE);rn if (l_fUnhooked)rn rn g_nHookCount = 0;rn g_hKeyboardHook = NULL;rn rnrn return l_fUnhooked;rnrnrnbool _declspec(dllexport) __stdcall AddHotKey(HWND hWnd, UCHAR ucVirtualKey, UCHAR ucMaskKey)rnrn if (!::IsWindow(hWnd))rn rn return false;rn rnrn list::iterator l_itr;rn for (l_itr = g_LstHKEntries.begin(); l_itr != g_LstHKEntries.end(); ++l_itr)rn rn if (l_itr->hWnd == hWnd && l_itr->ucVirtualKey == ucVirtualKey && l_itr->ucMaskKey == ucMaskKey)rn rn return true;rn rn rnrn HotKeyRegEntry l_entry = hWnd,ucVirtualKey,ucMaskKey;rn g_LstHKEntries.push_back(l_entry);rn rn return true;rnrnrnbool _declspec(dllexport) __stdcall DeleteHotKey(HWND hWnd, UCHAR ucVirtualKey, UCHAR ucMaskKey)rnrn list::iterator l_itr;rnrn for (l_itr = g_LstHKEntries.begin(); l_itr != g_LstHKEntries.end(); ++l_itr)rn rn if (l_itr->hWnd == hWnd && l_itr->ucVirtualKey == ucVirtualKey && l_itr->ucMaskKey == ucMaskKey)rn rn //找到则删除,并返回truern g_LstHKEntries.erase(l_itr);rn return true;rn rn rnrn //找不到则返回falsern return false;rnrnrnHWND _declspec(dllexport) __stdcall SetMouseHook(HWND hWnd)rnrn HWND l_hWndRet = g_hWndCatcher;rnrn if (NULL == hWnd)rn rn return l_hWndRet;rn rnrn g_hWndCatcher = hWnd;rn rn if (NULL == g_hMouseHook)rn rn g_hMouseHook = ::SetWindowsHookEx(WH_MOUSE,MouseProc,g_hIns,0);rn rnrn return l_hWndRet;rnrnrnvoid _declspec(dllexport) __stdcall ReleaseMouseHook()rnrn if (NULL != g_hMouseHook)rn rn ::UnhookWindowsHookEx(g_hMouseHook);rn g_hMouseHook = NULL;rn g_hWndCatcher = NULL;rn rnrnrnvoid VerifyWindow()rnrn list::iterator l_itr;rnrn for (l_itr = g_LstHKEntries.begin(); l_itr != g_LstHKEntries.end(); ++l_itr)rn rn if (!::IsWindow(l_itr->hWnd))rn rn g_LstHKEntries.erase(l_itr);rn rn rnrn if (!::IsWindow(g_hWndCatcher)) //不是窗口,则卸载钩子rn rn ::UnhookWindowsHookEx(g_hMouseHook);rn g_hMouseHook = NULL;rn g_hWndCatcher = NULL;rn rnrnrn// CHookApp 初始化rnrnBOOL CHookApp::InitInstance()rnrn AFX_MANAGE_STATE(AfxGetStaticModuleState());rn g_hIns=AfxGetInstanceHandle();rn InitHook();rn return CWinApp::InitInstance();rnrnrnint CHookApp::ExitInstance() rnrn VerifyWindow();rn UnInitHook();rn return CWinApp::ExitInstance();rn 论坛

智能电视——下一个蓝海

08-10

“我们今天正处于这样一个年代,充满幻想的人们发现,自己已经获得了曾经梦寐以求的改造世界的力量。” rnrn——PC革命权威历史著作《硅谷之火》rnrn在CSDN,我们认为随着新一轮技术大变革的开启,各种新设备和新平台兴起,开发者的黄金时代已经到来。rnrn回顾历史,信息产业发展的历程,也可以视为开发者在一次次变革中抓住新平台出现的机遇,不断展示力量的史诗。个人电脑时代,由于新的PC平台的出现,涌现了微软、Adobe、Symantec、金山等为代表的众多开发者主导创办的软件公司,还有Linux这样伟大的开源项目。互联网时代,程序员们又通过Yahoo、Google、Facebook、Twitter、维基百科、腾讯、百度、新浪等网站改变了全世界的面貌。rnrn眼下这一轮大变革则有所不同,其影响将更为深远。未来可能难以想象,老牌的个人电脑制造商Apple公司,居然在十年内先后用iPod+iTunes、iPhone+App Store的模式颠覆了音乐业、通信行业和手机行业,加上iPad,还在颠覆软件业、电脑业和新闻出版行业。毋庸置疑,今天,Apple的iOS与同样是外来者的互联网公司Google推出的Android,已经势如破竹般地席卷了全世界,改变了移动乃至IT产业的整个面貌,也为开发者提供了前所未有的舞台,移动大潮涌动,越来越多开发人员加入到移动应用大军中。仅仅数年之内,Apple App Store和Google Android Market都已经有数十万种应用,竞争日益白热化:全球精英团队云集,很多领域先行者已经建立了较高门槛,应用获取和留住用户成本越来越高,盈利日益困难。rnrn另一个新兴的热土,是Facebook、Twitter、腾讯、新浪、淘宝等互联网服务提供的各种开放平台。通过开放API、开放标准,第三方开发者可以在某种程度上共享平台拥有的用户和数据,大大降低了新应用和服务的用户获取、推广的门槛。然而,开放平台往往成为已有服务的扩展和推广的场所,虽然也涌现了Zynga等新贵,但绝大多数小公司和创业团队盈利并不轻松。另一方面,平台本身的扩张和规则改变,也使开放平台的生态圈潜伏危机。rnrn何处将成为新的蓝海?rnrn现在看来,智能电视将成为开发者的新战场。这里所说的智能电视,指的是集成了各种互联网服务和软件应用的电视或者机顶盒以及相关的技术平台/解决方案。rnrn首先,电视终端的规模非常大。据DisplaySearch的7月29日的报告,2011年电视的全球销量预计为2.52亿台,其中84%为平板电视。中国首次超过北美和西欧,成为全球最大平板电视市场,总出货量超过4600万。而其中智能电视普及的速度很快,预计到2015年末将累计超过5亿台。如果考虑到电视的用户一般是多人,再加上各种智能置顶盒的数量,与智能手机预计全球年销量4.2亿、平板数千万相比,这个市场的容量是非常可观的。rnrn而且,作为客厅长期的主宰者,处于家庭的中心,[b]电视的影响力和潜在盈利空间也是非常惊人的[/b]。一方面,电视上投放的广告额高达近2000亿美元,份额在40%以上,是互联网的两倍多,而且仍然在高速增长,相比之下,移动广告目前不到总量的1%。另一方面,它不仅直接针对人们关系最紧密的第一社交圈(能坐在一起看电视的,一般不会是外人),具有天然的社交性,而且占用的时间很多(Nielsen调查,普通美国人每周看电视近36小时),更有可能成为家庭重大采购的决策影响因素,因此在电子商务方面也有较大潜力。同时,电视的大屏幕和多人可以同玩的独特优势,与许多视频游戏天然更加匹配,微软Kinect成为历史上销售最快的电子产品,并非偶然。rn[img=http://articles.csdn.net/uploads/allimg/110810/28_110810105407_1.png][/img]rnrn另外值得一提的是,与我们许多人想象的不同,据英国所做的一个调查,智能手机和平板的流行反而可能带来电视尤其是智能电视的复兴。在拥有iPad的用户都是电视迷,有74%看录播电视,38%看直播电视,此外有更高比例的人喜欢通过YouTube或者iTune视频观看电视节目。还有调查发现,很多人喜欢边用手机、平板,边看电视。各种设备之间的同步、共享、交互中显然蕴含着巨大的软件应用商机。rnrn事实上,各路厂商已经纷纷投入这一巨大的蓝海。2001年的CES展会某种意义上已经成为智能电视大战的秀场。Google、Apple、微软、Intel等技术平台巨头,Netflix、Hulu等互联网企业,三星、LG、索尼、TCL、海尔、海信、长虹、康佳、创维等电视厂商,、任天堂等游戏平台,罗技等硬件厂商,都纷纷围绕电视推出了各有特色的产品或者解决方案,甚至零售巨头沃尔玛也收购了智能电视创业公司Vudu,此外,开源平台XBMC、创业企业Boxee等都发展得不错。2011已经被称为智能电视元年。rnrn然而,智能电视这次转型升级与其他液晶、平板、3D等等趋势都不一样,它对于电视厂商和电视运营企业(电视台和电视网),很可能与前几年智能手机对于传统手机厂商和电信运营商一样,既蕴育着巨大机遇,也意味着严峻挑战。正如诺基亚CEO Stephen Elop在那篇著名的分析行业趋势和公司现状的备忘录中所说:rnrn(在智能手机市场),设备之间的竞争已经演变为生态系统之间的竞争。生态系统不仅包括设备的软硬件,还包括开发人员、应用、电子商务、广告、搜索、社交应用、地理位置服务、统一通信及其他许多内容。我们的竞争对手并非通过设备抢占市场份额,而是通过一个完整的生态系统。这意味着,我们将不得不决定建立、促成或加入一个生态系统。rn rnrn这次转型升级,实际上是要将电视行业软件化、互联网化,纳入到正在形成之中的大信息产业中,满足用户无时无刻智能地获得持续在线服务的要求。分析起来,我们可以看到:rnrn1.Google、Apple等平台厂商因为已经建立了一个可以移植的生态系统,仍然握有天然优势,掌握着主动权,正在试图再次扮演颠覆者的角色。rnrn2.电视厂商里只有市场份额最大、实力最强的三星已经接受过智能手机大变革的洗礼,在软件、硬件、平台和生态系统方面都有相当的积累,处于有利的地位。而其他厂商尤其是国内的电视厂商,互联网的经验不足,软件研发的实力也比较弱,平台不是自己的,生态系统基本上是零,面临的困难非常多。rnrn3.电视运营企业的技术能力更弱,面对虎视眈眈的互联网各种视频服务和流媒体服务厂商的挑战,只能依靠政策和资金,用时间换得机会。rnrn当然,电视厂商和运营商并非没有机会,智能电视刚刚开始,在国内受政策等影响,格局还有很大定数,只要能及时采取正确的战略,通过优秀的终端产品用户体验和成熟的技术营销体系获得大量有忠实度的用户,以正确的模式吸引众多的合作伙伴,以开发者为中心尽快建立、促成或者加入一个生机勃勃的生态系统,三方面相辅相成,形成一个正向反馈,将在竞争中立于不败之地。在中国这样的新兴市场,能够以合适的价格、优质的产品、开放的心态吸引大量优秀的本地化互联网服务和移动应用,将吸引最大数量的用户。rnrn三星目前是战略最为清晰的,已经推出针对TV的App Store,并在全球各地举办各种开发者大赛,包括[url=http://support-cn.samsung.com/campaign/mobilephone/2011ldc/index.aspx?cid=cn_banner_HHP_Brand_CSDN.CN_201107HHPStarJul_20110701]目前国内正在举行的总奖金数高达200万美元的Samsung Apps星空大赛[/url]。与之对应的开发者社区也已经成型。rnrn国外的电视运营商们也没有闲着,BBC推出iPlayer,HBO推出Go,Sky推出Go,英国的Channel 4推出4oD,开始使自己的内容互联网化、移动化。rnrn国内,海信和TCL已经举办了应用开发大赛,与软件开发社区有了初步的接触,这是正确的开始,但要坚定地走下去。rnrn而对于开发者而言,智能电视的兴起意味着又一个大机遇的到来。如果能抓住这个新机会,先人一步进入这一格局未定的市场,获得经验积累,比在其他红海中更有可能建立自己的优势,最终在统一平台的竞争中获得更为有利的地形。rnrn 论坛

没有更多推荐了,返回首页