灯是第二天下午装上的。
陈默和张浩跑了趟灯具市场,挑最便宜的那种led吸顶灯。方方正正一个白盒子,四十瓦。老板说保三年,张浩嘀咕“能用一年就谢天谢地”。
回来路上经过五金店,又买了卷电线,几个开关插座。张浩拎着塑料袋,塑料提手勒进掌心,勒出两道深痕。
爬上七楼,两人都喘。陈默靠在门框上缓气,汗顺着鬓角往下淌。
“以后……得多锻炼。”张浩把袋子扔地上,哐啷一声。
房间还是昨天的样子。桌子椅子靠墙放着,文件柜孤零零立着。阳光从裂缝挤进来,在地板上切出一道歪斜的光斑。
陈默踩上椅子,踮脚去够天花板预留的灯线。灰尘扑簌簌落下来,他眯起眼。
张浩在下面递工具。螺丝刀,绝缘胶布,测电笔。陈默拧开灯座,裸露的铜线头翘着,摸上去有点扎手。
“闸拉了?”他问。
“拉了。”张浩蹲在电表箱旁边,“整层都黑了。”
接线,缠胶布,固定灯座。动作生疏,但步骤没错。最后把白盒子扣上去,卡扣咔哒一声响。
陈默从椅子上跳下来,膝盖震得发麻。
“试试。”张浩走到电表箱前。
闸推上去。灯亮了。
白光瞬间灌满房间。墙壁上的污渍,地上的裂纹,铁楼梯扶手的锈迹,全都清清楚楚。灰尘在光柱里翻滚,像暴雪。
张浩仰着头看。“还挺亮。”
陈默走到开关旁,按了一下。灯灭。再按,灯亮。一明一暗,房间在崭新和陈旧之间切换。
他多按了几次。明,暗,明,暗。
“上瘾了?”张浩笑。
陈默停下手。灯亮着。他走到窗边,裂缝在强光下变得模糊,像玻璃上的一道浅痕。
“总算像样了。”他说。
张浩打开笔记本电脑。热点,下载速度跳上200kb/s。“网还是得尽快拉。”
“明天约了电信的人。”陈默说。
两人开始布置。桌子搬到窗下并排,椅子摆正。文件柜推到墙角,陈默把那张旧发票贴在了柜门内侧。
服务器机柜暂时没买,先用两个塑料整理箱装设备。箱子上贴着标签:主板测试、摄像头模组、备用电源。
忙到傍晚,房间有了雏形。张浩从包里掏出两盒泡面,晃了晃。“庆祝一下?”
陈默点头。两人去楼层的公共休息区接热水。
休息区在走廊尽头,十平米见方。靠墙摆着两张旧沙发,海绵从破口露出来。中间有张矮茶几,玻璃面裂了,用透明胶粘着。
墙角有台饮水机,红灯亮着,表示正在加热。旁边垃圾桶塞满了外卖盒子,酸味混着油味。
张浩撕开泡面盖子,把调料包倒进去。陈默按下热水键,蒸汽喷出来,扑在脸上湿漉漉的。
“这层住多少人?”张浩问。
“中介说租出去六七间。”陈默看着热水注进纸碗,面饼慢慢浮起来,“但白天没见着人。”
话音未落,走廊传来脚步声。很重,带着回音。
一个男人走进休息区。三十出头,平头,黑框眼镜。穿着灰色卫衣,胸前印着个褪色的机器人图案。他手里端着个马克杯,杯沿有咖啡渍。
看见陈默和张浩,他愣了一下,随即点头。“新搬来的?”
“昨天刚签合同。”陈默说。
“哪间?”
“七零三。”
“我对门。”男人笑了,露出有点歪的门牙,“七零四。”
他走到饮水机前接水。马克杯很旧,瓷釉剥落了几块。接满热水,他撕开一条速溶咖啡倒进去,用勺子慢慢搅。
勺子碰着杯壁,叮,叮,叮。
“做什么的?”男人问,眼睛透过镜片打量他们。
“安防算法。”陈默说,“社区用的。”
“硬件还是软件?”
“软件为主,对接硬件。”
男人点点头,喝了一口咖啡。烫,他龇牙咧嘴吸了口气。“我是做硬件的。嵌入式,智能家居方向。”
他掏出一张名片递过来。纸质粗糙,边缘没切齐。上面印着:周宇,智创硬件工作室。
陈默接过,看了看。“周宇?”
“对。”周宇把勺子放在茶几上,“这层就咱们两家做技术的。其他有搞直播的,有做微商的,还有个卖二手书的。”
张浩插话:“你工作室几个人?”
“就我一个。”周宇耸耸肩,“以前有合伙人,去年撤了。嫌不赚钱。”
他说得很随意,但嘴角往下撇了撇。
泡面好了。陈默和张浩端着面碗,周宇端着咖啡,三人就在沙发坐下。沙发弹簧坏了,坐下去陷得很深。
“你们主要做什么产品?”陈默问。
“智能开关,传感器,还有定制控制器。”周宇掰着手指数,“最近在折腾一个路灯控制器,带环境感知的。能根据车流量调亮度,省电。”
陈默筷子停在半空。“车流量检测用摄像头?”
“对,低分辨率模组就行。”周宇身体前倾,“但算法卡住了。背景光变化大的时候,误检率高。”
“什么算法?”
“简单的前景提取加轮廓匹配。”周宇比划,“晚上车灯一照,影子乱飘,就分不清了。”
陈默没说话。他低头吃了一口面,面条泡得有点软。
张浩看看陈默,又看看周宇。“我们老大做检测算法挺厉害的。”
“哦?”周宇眼镜后的眼睛亮了亮。
“社区安防,也要处理各种光照条件。”陈默放下筷子,“不过场景不一样。”
“底层逻辑能借鉴吧?”周宇说,“我那个需求其实不复杂,就是要稳定。路灯控制器嘛,装在户外,风刮雨淋的,不能老出错。”
他从口袋里掏出手机,点开几张照片。电路板设计图,焊了一半的样品,还有测试数据截图。
陈默接过手机看。照片拍得随意,但对焦清楚。电路板走线规整,元器件排列紧凑。
“这是主控?”他指着一个芯片。
“st32f4。”周宇说,“成本压得低,性能够用。”
陈默一张张翻过去。最后一张是测试现场,控制器装在路灯杆上,电线裸露着缠了几圈胶布。背景是条乡镇公路,路灯昏黄。
“有实测数据吗?”陈默问。
“有,但不理想。”周宇拿回手机,点开一个表格,“晴天还行,误检率百分之五以内。阴天就蹦到百分之二十,下雨天直接没法用。”
数据列得很详细,时间、天气、车流量、误报次数。最后一行用红字标着:需优化检测算法。
陈默盯着那行红字。面汤凉了,浮起一层白色油脂。
“你们算法跑在什么平台上?”他问。
“就主控芯片上,没外挂处理器。”周宇说,“所以不能太复杂,内存和算力都有限。”
“模型参数量级?”
“最好十万以内。”周宇伸出两根手指,“二十万是极限。”
张浩吹了声口哨。“这要求不低。”
周宇苦笑。“要不怎么卡了半年。”
休息区安静下来。饮水机咕噜一声,又烧开一锅水。走廊那头传来隐约的音乐声,是那种网络神曲,旋律重复得让人烦躁。
陈默端起面碗,把剩下的汤喝完。咸,味精味很重。
“我可以看看你的代码吗?”他放下碗。
周宇愣了愣。“代码……有点乱。”
“就看检测部分。”
周宇犹豫了几秒,然后点头。“行。我笔记本在屋里,现在拿?”
“现在吧。”
周宇起身往外走,脚步声很快。陈默和张浩对视一眼。
“要帮忙?”张浩压低声音。
“看看。”陈默说,“不费什么事。”
周宇抱着笔记本电脑回来,屏幕亮着。他在陈默旁边坐下,打开一个工程文件夹。
代码确实乱,注释少,变量名随意。但结构清晰,图像采集、预处理、检测、输出,几个模块分得清楚。
陈默滚动鼠标滚轮。检测部分用了经典的光流法加阈值分割,代码写了一百多行。
“这里。”他指着一行,“阈值是固定的?”
“对,手动调的。”周宇说,“不同天气得改参数,麻烦。”
“可以试试自适应阈值。”陈默说,“根据图像灰度分布动态调整。”
“算力够吗?”
“够,就多一次直方图统计。”
陈默接过电脑,新建了一个文件。手指敲键盘,嗒嗒嗒的声音在休息区回响。他写了段伪代码,二十几行,逻辑清楚。
周宇凑近看,眼镜几乎贴到屏幕上。
“这样……雨天灰度分布会偏移,阈值自动跟着动。”他喃喃道。
“嗯。”陈默敲下最后一个分号,“但只能解决一部分问题。真要稳定,得用更鲁棒的算法。”
“比如?”
陈默停顿了一下。他眼前浮出系统界面,推演次数还在那里亮着。但他没点。
“边缘特征加运动轨迹过滤。”他说,“车灯移动轨迹有规律,背景噪声是随机的。”
周宇眼睛越来越亮。“这个思路好!轨迹过滤……内存够吗?”
“开个环形缓冲区,存最近十帧的检测结果。”陈默在纸上画示意图,“做轨迹匹配,不是车就滤掉。”
张浩也凑过来看。“有点像我们小区那个行人追踪的简化版。”
“对,简化再简化。”陈默说,“硬件限制摆在那儿。”
周宇盯着那张纸,手指在膝盖上敲。敲了十几下,他突然站起来。
“你们等等。”
他又跑回房间,这次抱回来一块白板。白板是折叠的,支架有点歪。他支在茶几旁,抽出马克笔。
笔帽拧开,有股刺鼻的酒精味。
周宇在白板上画系统框图。图像输入,预处理,特征提取,轨迹管理。他画得很快,线条歪歪扭扭,但逻辑清晰。
“这样改,架构得动。”他边画边说,“但能彻底解决问题。”
陈默走过去,接过另一支笔。他在轨迹管理模块旁边加了个小框:误报反馈学习。
“加个自学习机制。”他写,“把误报样本存起来,定期更新过滤规则。”
“离线学习?”
“对,每天凌晨跑一次,不占实时算力。”
周宇看着那个小框,嘴巴微微张开。他摘下眼镜,用衣角擦了擦。
“哥们儿。”他说,“你这思路……可以啊。”
张浩笑了。“我们老大以前在大公司搞核心算法的。”
周宇重新戴上眼镜,看向陈默。“哪个公司?”
“智瞳科技。”陈默说。
周宇表情变了变。“智瞳……我知道。他们也在做智慧社区,方案挺贵的。”
“嗯。”
“你从那儿出来的?”
“出来了。”陈默没多说。
周宇也没多问。他重新看向白板,手指摩挲着下巴。胡茬很短,摩擦出沙沙声。
“咱们……能合作吗?”他忽然说。
陈默转头看他。
“我出硬件,你出算法。”周宇语速加快,“这个路灯控制器,市场其实不小。市政,乡镇,景区,都需要节能改造。咱们把方案做稳定了,可以打包卖。”
“怎么合作法?”
“技术入股,或者你授权算法,我按销量分成。”周宇说,“当然,现在说这个还早。咱们可以先做个原型,实测看看效果。”
陈默没立刻回答。他走到窗边,看向外面。天色暗了,工业园的路灯陆续亮起,昏黄的光晕连成一线。
远处传来火车鸣笛,悠长的一声。
“你们现在主要做社区安防?”周宇问。
“刚起步,接了个试点。”陈默说,“硬件也是问题,得找稳定的供应商。”
“硬件我可以帮忙。”周宇说,“我认识几个厂家,摄像头模组,电源模块,都做过。质量还行,价格能谈。”
陈默转回身。“你有渠道?”
“干这行七八年了,攒了点资源。”周宇笑笑,“虽然没赚大钱,但人脉还行。”
张浩插话:“我们正愁摄像头货源呢。市面上的要么贵,要么不稳定。”
“回头我推几个联系人给你们。”周宇掏出手机,“加个微信?”
三人互加了微信。周宇的头像是电路板照片,陈默的是默认灰色人影,张浩的是只猫。
加完好友,周宇把白板上的图拍下来,发到群里。
“这就算立项了。”他半开玩笑地说。
陈默看着手机屏幕。群名叫“路灯项目组”,成员三个。他点开那张图,放大,细节清晰。
“原型机什么时候能做出来?”他问。
“给我两周。”周宇说,“硬件我都有现成的,改改就行。算法部分……”
“我一周内给你第一版。”陈默说。
周宇伸出拳头。陈默顿了顿,也伸出拳头。两个拳头轻轻碰了一下。
很轻,但声音实在。
走廊的音乐声停了。楼下传来电动车报警器的尖叫,呜呜呜响了十几秒,又戛然而止。
陈默收拾泡面盒子。纸碗被汤泡软了,底部渗出一圈油渍。
“你们办公室还缺什么?”周宇问。
“什么都缺。”张浩说,“连个烧水壶都没有。”
“我那有多的,明天拿给你。”周宇说,“还有个旧显示器,你们要不要?19寸的,有点暗,但能用。”
“要。”陈默说,“谢谢。”
“别客气。”周宇摆摆手,“这层就咱们两家搞技术的,互相照应。”
他抱起白板和电脑,往门口走。走到一半又回头。
“对了。”他说,“周末这儿有时会有人来串门。其他楼的创业者,偶尔还有投资机构的。你们要有兴趣,可以聊聊。”
“投资机构?”
“小型的,早期那种。”周宇说,“不过别抱太大希望,他们眼光高。”
陈默点头。“知道了。”
周宇离开后,休息区又空了。饮水机的红灯还亮着,水已经烧开很久了。
张浩关掉开关。“这周宇人挺实在。”
“嗯。”陈默把泡面盒子扔进垃圾桶。
“真要跟他合作?”
“试试看。”陈默说,“技术互补,渠道也能用。”
两人走回七零三。灯还亮着,白光从门缝透出来,在走廊地砖上切出一道梯形。
推门进去,房间在灯光下显得更空了。桌子,椅子,文件柜,整理箱。就这么几样东西。
但陈默站了一会儿,忽然觉得没那么空了。
他走到桌边,打开笔记本电脑。屏幕亮起,壁纸是默认的蓝色山峰。
他新建了一个文档,命名为“路灯控制器算法v01”。然后开始写需求分析,技术要点,时间规划。
键盘敲击声很轻,但在安静的房间里格外清晰。
张浩坐在另一张桌子前,也在写东西。他写的是采购清单,水壶,插排,白板笔,还有绿植。
“买个仙人掌吧。”他嘀咕,“好养活。”
陈默没抬头。“行。”
写了一个小时,初步框架出来了。陈默保存文档,伸了个懒腰。脊椎咔咔响了两声。
他看向窗外。天完全黑了,玻璃变成一面模糊的镜子,映出房间的倒影:灯,桌子,两个坐着的人影。
裂缝还在那里,但在黑暗里看不见了。
手机震了一下。是周宇发来的消息,几张摄像头模组的规格书和报价单。
陈默点开看。参数不错,价格比市面低百分之十五。
他回:“收到,明天细聊。”
周宇秒回:“ok。对了,周末下午两点,有个小聚会,在二楼公共活动室。来玩玩?”
陈默想了想,打字:“好。”
发送。
他放下手机,看向张浩。“周末下午,二楼有创业者聚会。”
张浩抬头。“去?”
“去看看吧。”陈默说,“多认识点人。”
张浩咧嘴笑。“咱们这也算混圈子了?”
“算吧。”陈默关掉电脑,“很小的圈子。”
灯还亮着。白光稳定,不闪。陈默走到开关前,手指悬在按钮上。
他按下去。灯灭。
黑暗瞬间吞没房间。但窗外有城市的夜光透进来,勉强能看见家具的轮廓。
他重新按亮。光明回归。
又试了几次。明,暗,明,暗。
这次张浩没笑他。张浩也看着灯,眼睛映着光点,很亮。
“咱们的第一盏灯。”张浩说。
“嗯。”陈默松开手,让灯亮着,“以后会有很多盏。”
他走到窗边,手掌贴上玻璃。凉意顺着掌心往上传。
透过玻璃,能看见工业园其他楼的窗户。有的黑着,有的亮着。亮着的窗户里,人影晃动,不知道在忙什么。
陈默站了很久。直到腿有点麻,才转身。
“回去吧。”他说,“明天还得拉网线。”
两人锁门下楼。脚步声在楼道里重叠,一声,一声。
走到园区门口,陈默又回头看了一眼。
七楼的窗户亮着。白光从裂缝里漏出来一点,很微弱,但在整栋楼的黑暗背景里,清晰得像一颗星。
他看了几秒,转身走进夜色。
风起来了,吹得路边的梧桐叶子哗哗响。远处有夜市的声音,模糊的喧闹,像潮水。
陈默把手插进口袋,摸到那把办公室钥匙。金属的,边缘有点锋利。
他握紧钥匙,棱角硌着掌心。
有点疼。
但感觉很实在。