首页 文章 精选 留言 我的

精选列表

搜索[数据库相关],共10023篇文章
优秀的个人博客,低调大师

人脸图像处理技术分析及相关行业应用

针对高密度人流量区域的安全管理,人脸布控系统以其短时间内实现多目标人脸抓取、识别检测的高效性能奠定了在行业领域不可取代的地位,不过,由于现阶段传统的监控系统大部分依旧存在图像清晰度低的缺陷,以及受光线、遮挡、年龄等因素的影响,导致系统在进行人脸识别过程时出现比对速度慢、对比结果不精确等,如何提升人脸识别的精准度成为人脸布控系统深化其应用价值的关键! 基于人脸识别技术的快速发展,现人脸布控系统在平安城市、交通、公安、金融、电力、司法、通信、酒店、展馆等行业已广泛应用,特别是通关口岸,车站,地铁站,机场等人流密集区域。人流量巨大,在这些人员密集区域进行人脸布控,可实现搜捕嫌疑犯、逃犯等功能,但是在实际应用中,人脸识别技术本身还有待进一步发展,特别是对于动态的人脸检测,夜景环境下,传统的监控系统依旧存在着大部分图像清晰度低的情况。现有的人脸识别方法对于人脸姿态变化、光照、表情、遮挡、年龄、模糊等一系列实际情况还需进一步提高,另外,由于人脸识别技术的实际应用实时性要求比较高,因此需要设计更高效更准确的识别算法,以便快速精准地识别犯罪分子,保证社会的长治久安。 常规的人脸识别流程为人脸检测、特征提取、人脸识别,在特征提取前先对人脸图像进行预处理,能有效的提高最终的识别效率及准确度。 人脸图像预处理技术 人脸图像预处理是基于人脸检测结果,对图像进行处理并最终服务于特征提取的过程。系统获取的原始图像由于受到各种条件的限制和随机干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度校正、噪声过滤等图像预处理。对于人脸图像而言,其预处理过程主要包括人脸图像的光线补偿、灰度变换、直方图均衡化、归一化、几何校正、滤波以及锐化等。 图像是人类获取信息、表达信息和传递信息的重要手段。利用计算机对图像进行去除噪声、增强、复原、分割、提取特征等的理论、方法和技术称为数字图像处理。 数字图像处理技术已经成为信息科学、计算机科学、工程科学、地球科学等诸多方面的学者研究图像的有效工具。数字图像处理主要包括图像变换、图像增强、图像编码、图像复原、图像重建、图像识别以及图像理解等内容。数字图像的边缘检测是图像分割、目标区域识别、区域形状提取等图像分析领域十分重要的基础,也是图像识别中提取图像特征的一个重要属性,边缘检测算子可以检查每个像素的邻域并对灰度变化率进行量化。 空域滤波按照空域滤波器的功能又可分为平滑滤波器和锐化滤波器。平滑滤波器可以用低通滤波实现,目的在于模糊图像或消除噪声;锐化滤波器是用高通滤波来实现,目的在于强调图像被模糊的细节。 光照不理想的情况下,为了把人脸区域从非人脸区域分割出来,需要使用适合不同肤色和不同光照条件的可靠的肤色模型。常用的RGB表示方法不适合于皮肤模型,在RGB空间,三基色(R、G、B)不仅代表颜色,还表示了亮度。由于周围环境光照的改变,亮度可能使人脸的检测变得更加复杂,在皮肤的分割过程中是不可靠的。为利用肤色在色度空间的聚类性,需要把颜色表达式中的色度信息与亮度信息分开,将R、G、B转换为色度与亮度分开的色彩表达空间可以解决这个问题。 RGB色彩系统用R、G、B三种基本颜色分量来表示数字图像像素的颜色值。我们非常熟悉的计算机屏幕的显示通常采用RGB色彩系统。这是最常见的色彩系统,RGB色系坐标中三维空间的三个轴分别与红、绿、蓝三基色相对应,原点对应于黑色,离原点最远的顶点对应于白色,其他颜色落在三维空间中由红、绿、蓝三基色组成的彩色立方体中。其他的色彩系统常以RGB色彩系统为基础,其分量可以描述为RGB三色的线性或非线性函数。RGB色彩系统通过色彩的相加来产生其他颜色,通常称为加色合成法。 当光照条件发生变化时,人脸的颜色也会发生一定的变化。实验表明,当待检测的图像亮度高于训练图像的亮度时,人脸大部分区域的颜色不会超过正常光照条件下人脸颜色的变化范围。但当待检测的人脸图像的亮度低于训练样本图像的亮度时,人脸颜色很可能超出正常光照条件下人脸颜色的变化范围。为了解决这一问题,就要对待检测的人脸图像进行光线补偿。光线补偿对于画面较暗的图像很有效,能极大提高后续肤色建模的效果。对于光线较暗的图片进行光线补偿可以很好地提高人脸肤色建模的效果。 在运动场景下,多数时候会抓拍到的只有半张脸的图片,使用对称补值的方式,能有效地为下一步特征提取补齐整张人脸的最低特征值,并进行有效识别;对于动态识别场景,往往出现人脸信息不全的情况,特别是对于疑犯等,都存在故意压低头或者侧脸方式行走,避免被监控抓拍到全脸的情况;使用半脸对称补值方式,有效地解决了此场景问题。 在一系列的预处理后,人脸识别的最终准确率及效率得到大幅度提升,且能适用更多的应用场景,对于原始已建设的安防系统,不需要二次的改造,不仅节约成本,也解决实际问题。 人脸识别技术在多领域的应用 人脸识别技术在多领域的应用 随着卷积神经网络深度学习的发展,以及人脸识别算法的多样化趋势,针对人物年龄、性别的识别技术也越来越成熟。通过对大量人物图片进行年龄和性别的标注,然后经过训练,便能得出很好的模型,原始数据训练得越多,模型的准确度也越高。深度学习的一些网络结构模拟人的大脑,通过网络的深度和卷积,目前在人脸识别领域达到很好的效果,而随着识别速度和精确度的不断加强,人脸识别在公安案件侦查、车站机场检票系统、住宅出入口管理、精准商业营销以及考场身份验证等多领域展开了多元化的行业应用。 公安行业的应用 为查询没有身份证件或证件资料假冒的犯罪嫌疑人的身份,为追捕疑犯、逃犯,提供了有效的多方位数据检索条件,这有利于快速锁定疑犯特性范围,对提高办案效率和破案成功率有很大帮助,也为目前公安使用的防伪可机读的第二代身份证提供了有力的技术保障。 车站自主检票应用 车站自动检票,应用人脸识别技术,在人脸识别系统机放置二代身份证,识别机器上屏幕的一边显示其个人信息与身份证照片,另一边显示摄像头拍摄的游客人脸照片。后台识别为同一人时,则播报“验证成功,请通过”;不通过,则报警提示,这样极大地节省了人工操作时间及人力成本。 家居行业的应用 随着生活质量的提高,人们对于智能化的要求越来越高。通过人脸识别技术,根据设定的布防策略,结合门禁的应用,对陌生人出入住宅进行自动报警或自动放行,给人们的居家安全提供保障。同时,它还可应用到住宅区、办公大楼安全管理等。 精准营销的应用 年龄、性别的识别融入到人脸识别应用后,对于商业化的数据挖掘起到推进作用,通过监控的区域部署人脸识别系统,分析不同性别及不同年龄在各种不同商场的喜好,能有效提供分段数据,为营销的下一步决策提供有力依据,精准营销可用于金铺、4S店、大商场等。 其它应用 考试地点,通过人脸识别,在入场拍照同时刷身份证验证,由系统后台进行智能化的人证比对,并对现场的作弊行为进行实时监控,有效减轻了考务人员的工作量,也降低了人工肉眼核对的出错率及人情因素隐患。 本文转自d1net(转载)

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

找免费WiFi不用愁 Facebook将出相关APP

想知道哪儿有免费的Wi-Fi?以后iPhone用户打开Facebook的APP或许就能很快地找到附近的公共免费Wi-Fi了。Facebook日前证实,他们将在iOS版APP中推出搜寻公共Wi-Fi的功能,不过该项功能目前仅支持iOS使用。 Facebook将在iOS版APP中推出搜寻公共Wi-Fi的功能 据了解,这项功能会藏在功能表的“设定”里,被称作“Find Wi-Fi(寻找Wi-Fi)”。用户在启用后,Facebook App就会自动搜寻附近的可用Wi-Fi,并呈现在地图上。不过,鉴于目前Facebook只在某些指定的国家内推出该功能,所以该应用尚无法全面有效。 “寻找免费Wi-Fi”或许也是Facebook继先前的无人机与卫星网络计划后,另一项提供上网途径的推广策略,同时目标用户也比较针对发展中国家的城市居民,而不是农村。3年前Facebook也曾与思科合作,为商家部署Wi-Fi。一旦用户在商家的粉丝团专页登录,就可以通过Facebook帐号,自动登入并使用店家的上网服务。 该寻找Wi-Fi的小工具,应该是通过Wi-Fi的信号强度,来反向判断无线热点的位置。实际上目前的手机也普遍会结合Wi-Fi热点的信号,来帮助进行GPS定位,因此Facebook的方法或许也是采用该理念而设计的应用。 不过,由于该功能操作的简便性,将能够侧面帮助实体商家展示广告,同时帮助Facebook APP构建出更多特色功能,来吸引新用户和提升老用户的粘性。但关于该应用的进一步演进,Facebook尚未给出更多介绍。 本文转自d1net(转载)

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

正确理解SQL Server配置timeout相关选项

正确理解SQL Server配置选项“remote login timeout”和“remote query timeout” 查看配置选项的设置 sp_configure 远程登录超时 参考:https://msdn.microsoft.com/en-us/library/ms175136.aspx “The remote login timeout option specifies the number of seconds to wait before returning from a failed attempt to log in to a remote server. For example, if you are trying to log in to a remote server and that server is down, remote login timeout helps make sure that you do not have to wait indefinitely before your computer stops trying to log in. The default value for this option is 10 seconds. A value of 0 allows for an infinite wait. The default value for this option is 20 seconds in SQL Server 2008. The remote login timeout option affects connections to OLE DB providers made for heterogeneous queries. The setting takes effect immediately without restarting the server.” EXECsp_configure'remotelogintimeout',35; GO RECONFIGURE; GO 远程查询超时 参考:https://msdn.microsoft.com/en-us/library/ms189040.aspx “The remote query timeout option specifies how long, in seconds, a remote operation can take before SQL Server times out. The default value for this option is 600, which allows a 10-minute wait. This value applies to an outgoing connection initiated by the Database Engine as a remote query. This value has no effect on queries received by the Database Engine. To disable the time-out, set the value to 0. A query will wait until it is canceled. For heterogeneous queries, remote query timeout specifies the number of seconds (initialized in the command object using the DBPROP_COMMANDTIMEOUT rowset property) that a remote provider should wait for result sets before the query times out. This value is also used to set DBPROP_GENERALTIMEOUT if supported by the remote provider. This will cause any other operations to time out after the specified number of seconds. For remote stored procedures, remote query timeout specifies the number of seconds that must elapse after sending a remote EXEC statement before the remote stored procedure times out. The setting takes effect immediately without restarting the server. ” EXECsp_configure'remotequerytimeout',0; GO RECONFIGURE; GO 远程服务器和链接服务器的对应选项 参考:https://msdn.microsoft.com/en-us/library/ms178532.aspx sp_serveroption[@server=]'server' ,[@optname=]'option_name' ,[@optvalue=]'option_value'; connect timeout Time-out valuein seconds for connecting to a linked server. If 0, use the sp_configure default. query timeout Time-out value for queries against a linked server. If 0, use the sp_configure default. 我只简单解释一句,这几个选项只是针对“outgoing connections”。

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

项目实战工具类(一):PhoneUtil(手机信息相关)

可以使用的功能: 1、获取手机系统版本号 2、获取手机型号 3、获取手机宽度 4、获取手机高度 5、获取手机imei串号 ,GSM手机的 IMEI 和 CDMA手机的 MEID. 6、获取手机sim卡号 7、获取手机号 8、判断sd卡是否挂载 9、获取sd卡剩余空间的大小 10、获取sd卡空间的总大小 11、判断是否是平板 12、判断一个apk是否安装 13、拨打电话 14、打开网页 15、获取应用权限 名称列表 16、获取手机内安装的应用 17、获取手机安装非系统应用 18、获取安装应用的信息 19、打开指定包名的应用 20、卸载指定包名的应用 21、手机号判断 工具类: 1 import java.io.File; 2 import java.util.ArrayList; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 import java.util.regex.Matcher; 7 import java.util.regex.Pattern; 8 9 import android.content.Context; 10 import android.content.Intent; 11 import android.content.pm.ApplicationInfo; 12 import android.content.pm.PackageInfo; 13 import android.content.pm.PackageManager; 14 import android.content.pm.PackageManager.NameNotFoundException; 15 import android.content.pm.PermissionGroupInfo; 16 import android.content.pm.PermissionInfo; 17 import android.content.pm.ResolveInfo; 18 import android.content.res.Configuration; 19 import android.net.Uri; 20 import android.os.Environment; 21 import android.os.StatFs; 22 import android.telephony.TelephonyManager; 23 import android.util.TypedValue; 24 import android.view.WindowManager; 25 26 public class PhoneUtil { 27 private static PhoneUtil phoneUtil; 28 29 public static PhoneUtil getInstance() { 30 if (phoneUtil == null) { 31 synchronized (PhoneUtil.class) { 32 if (phoneUtil == null) { 33 phoneUtil = new PhoneUtil(); 34 } 35 } 36 } 37 return phoneUtil; 38 } 39 40 /** 41 * 获取手机系统版本号 42 * 43 * @return 44 */ 45 public int getSDKVersionNumber() { 46 int sdkVersion; 47 try { 48 sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK_INT); 49 } catch (NumberFormatException e) { 50 e.printStackTrace(); 51 sdkVersion = 0; 52 } 53 return sdkVersion; 54 } 55 56 /** 57 * 获取手机型号 58 */ 59 public String getPhoneModel() { 60 return android.os.Build.MODEL; 61 } 62 63 /** 64 * 获取手机宽度 65 */ 66 @SuppressWarnings("deprecation") 67 public int getPhoneWidth(Context context) { 68 WindowManager wm = (WindowManager) context 69 .getSystemService(Context.WINDOW_SERVICE); 70 return wm.getDefaultDisplay().getWidth(); 71 } 72 73 /** 74 * 获取手机高度 75 * 76 * @param context 77 */ 78 @SuppressWarnings("deprecation") 79 public int getPhoneHeight(Context context) { 80 WindowManager wm = (WindowManager) context 81 .getSystemService(Context.WINDOW_SERVICE); 82 return wm.getDefaultDisplay().getHeight(); 83 } 84 85 /** 86 * 获取手机imei串号 ,GSM手机的 IMEI 和 CDMA手机的 MEID. 87 * 88 * @param context 89 */ 90 public String getPhoneImei(Context context) { 91 TelephonyManager tm = (TelephonyManager) context 92 .getSystemService(Context.TELEPHONY_SERVICE); 93 if (tm == null) 94 return null; 95 return tm.getDeviceId(); 96 } 97 98 /** 99 * 获取手机sim卡号 100 * 101 * @param context 102 */ 103 public String getPhoneSim(Context context) { 104 TelephonyManager tm = (TelephonyManager) context 105 .getSystemService(Context.TELEPHONY_SERVICE); 106 if (tm == null) 107 return null; 108 return tm.getSubscriberId(); 109 } 110 111 /** 112 * 获取手机号 113 * 114 * @param context 115 */ 116 public String getPhoneNum(Context context) { 117 TelephonyManager tm = (TelephonyManager) context 118 .getSystemService(Context.TELEPHONY_SERVICE); 119 if (tm == null) 120 return null; 121 return tm.getLine1Number(); 122 } 123 124 /** 125 * 判断sd卡是否挂载 126 */ 127 public boolean isSDCardMount() { 128 if (android.os.Environment.getExternalStorageState().equals( 129 android.os.Environment.MEDIA_MOUNTED)) { 130 return true; 131 } else { 132 return false; 133 } 134 } 135 136 /** 137 * 获取sd卡剩余空间的大小 138 */ 139 @SuppressWarnings("deprecation") 140 public long getSDFreeSize() { 141 File path = Environment.getExternalStorageDirectory(); // 取得SD卡文件路径 142 StatFs sf = new StatFs(path.getPath()); 143 long blockSize = sf.getBlockSize(); // 获取单个数据块的大小(Byte) 144 long freeBlocks = sf.getAvailableBlocks();// 空闲的数据块的数量 145 // 返回SD卡空闲大小 146 return (freeBlocks * blockSize) / 1024 / 1024; // 单位MB 147 } 148 149 /** 150 * 获取sd卡空间的总大小 151 */ 152 @SuppressWarnings("deprecation") 153 public long getSDAllSize() { 154 File path = Environment.getExternalStorageDirectory(); // 取得SD卡文件路径 155 StatFs sf = new StatFs(path.getPath()); 156 long blockSize = sf.getBlockSize(); // 获取单个数据块的大小(Byte) 157 long allBlocks = sf.getBlockCount(); // 获取所有数据块数 158 // 返回SD卡大小 159 return (allBlocks * blockSize) / 1024 / 1024; // 单位MB 160 } 161 162 /** 163 * 判断是否是平板 164 */ 165 public boolean isTablet(Context context) { 166 return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; 167 } 168 169 /** 170 * 判断一个apk是否安装 171 * 172 * @param context 173 * @param packageName 174 */ 175 public boolean isApkInstalled(Context context, String packageName) { 176 PackageManager pm = context.getPackageManager(); 177 try { 178 pm.getPackageInfo(packageName, 0); 179 } catch (PackageManager.NameNotFoundException e) { 180 return false; 181 } 182 return true; 183 } 184 185 /** 186 * 拨打电话 187 * 188 * @param context 189 * @param phoneNum 190 */ 191 public void call(Context context, String phoneNum) throws Exception { 192 if (phoneNum != null && !phoneNum.equals("")) { 193 Uri uri = Uri.parse("tel:" + phoneNum); 194 Intent intent = new Intent(Intent.ACTION_DIAL, uri); 195 context.startActivity(intent); 196 } 197 } 198 199 /** 200 * 打开网页 201 */ 202 public void openWeb(Context context, String url) { 203 try { 204 Uri uri = Uri.parse(url); 205 context.startActivity(new Intent(Intent.ACTION_VIEW, uri)); 206 } catch (Exception e) { 207 e.printStackTrace(); 208 } 209 } 210 211 /** 212 * 获取应用权限 名称列表 213 */ 214 public String[] getAppPermissions(Context context) 215 throws NameNotFoundException { 216 PackageManager pm = context.getPackageManager(); 217 PackageInfo packageInfo = pm.getPackageInfo(context.getPackageName(), 218 PackageManager.GET_PERMISSIONS); 219 return getAppPermissions(packageInfo); 220 } 221 222 public String[] getAppPermissions(PackageInfo packageInfo) 223 throws NameNotFoundException { 224 return packageInfo.requestedPermissions; 225 } 226 227 /** 228 * 获取手机内安装的应用 229 */ 230 public List<PackageInfo> getInstalledApp(Context context) { 231 PackageManager pm = context.getPackageManager(); 232 return pm.getInstalledPackages(0); 233 } 234 235 /** 236 * 获取手机安装非系统应用 237 */ 238 @SuppressWarnings("static-access") 239 public List<PackageInfo> getUserInstalledApp(Context context) { 240 List<PackageInfo> infos = getInstalledApp(context); 241 List<PackageInfo> apps = new ArrayList<PackageInfo>(); 242 for (PackageInfo info : infos) { 243 if ((info.applicationInfo.flags & info.applicationInfo.FLAG_SYSTEM) <= 0) { 244 apps.add(info); 245 } 246 } 247 infos.clear(); 248 infos = null; 249 return apps; 250 } 251 252 /** 253 * 获取安装应用的信息 254 */ 255 public Map<String, Object> getInstalledAppInfo(Context context, 256 PackageInfo info) { 257 Map<String, Object> appInfos = new HashMap<String, Object>(); 258 PackageManager pm = context.getPackageManager(); 259 ApplicationInfo aif = info.applicationInfo; 260 appInfos.put("icon", pm.getApplicationIcon(aif)); 261 appInfos.put("lable", pm.getApplicationLabel(aif)); 262 appInfos.put("packageName", aif.packageName); 263 return appInfos; 264 } 265 266 /** 267 * 打开指定包名的应用 268 */ 269 public void startAppPkg(Context context, String pkg) { 270 Intent startIntent = context.getPackageManager() 271 .getLaunchIntentForPackage(pkg); 272 startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 273 context.startActivity(startIntent); 274 } 275 276 /** 277 * 卸载指定包名的应用 278 */ 279 public void unInstallApk(Context context, String packageName) { 280 Uri uri = Uri.parse("package:" + packageName); 281 Intent intent = new Intent(Intent.ACTION_DELETE); 282 intent.setData(uri); 283 context.startActivity(intent); 284 } 285 286 /** 287 * 手机号判断 288 */ 289 public static boolean isMobileNO(String mobile) { 290 Pattern p = Pattern 291 .compile("^((145|147)|(15[^4])|(17[0-9])|((13|18)[0-9]))\\d{8}$"); 292 Matcher m = p.matcher(mobile); 293 return m.matches(); 294 } 295 296 }

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

京东公布机器人控制方法相关专利

爱企查 App 显示,京东科技信息技术有限公司于近日公布了“机器人控制方法、系统、设备、计算机可读介质和产品”专利。 摘要内容指出,本公开的实施例公开了机器人控制方法、系统、设备、计算机可读介质和产品。该方法的一具体实施方式包括:接收通信连接的机器人发送的图像数据流;根据上述图像数据流,生成重编码图像数据流;将上述重编码图像数据流发送至通信连接的头戴显示设备,以供上述头戴显示设备显示;接收上述头戴显示设备发送的位姿数据;根据上述位姿数据,生成对应上述机器人的控制量信息;将上述控制量信息发送至上述机器人,以供上述机器人控制进行运动。该实施方式与智能机器人有关,简化了设备,降低了设备成本和设备维度复杂度,提高了操作灵活性和精度,能够支持复杂操作,且提高了沉浸式体验效果。

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

中国移动申请 AI 数智人相关商标

天眼查知识产权信息显示,中国移动通信集团有限公司近日申请注册“中移智安麒”“中移安麒”商标,国际分类为通讯服务、科学仪器,当前商标状态均为等待实质审查。 根据介绍,作为中国移动自主研发的专家型数字员工,中国移动AI数智人安麒以大数据为基础、人工智能算法为驱动、安全专家知识为核心,具备自动化安全测试、个性化安全培训等功能。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

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部分的功能。

用户登录
用户注册