Git Product home page Git Product logo

Comments (7)

zagrodzki avatar zagrodzki commented on May 4, 2024

Looking through the gousb code that is used in this particular path, I believe there's only one case where that happens, and this is if libusb C call "libusb_open()" returns a "not found" error. Which is unusual, because that error is not on the list of the possible errors returned by libusb_open:
http://libusb.sourceforge.net/api-1.0/group__dev.html#ga8163100afdf933fabed0db7fa81c89d1

Looking in turn at the libusb code, that suggests the "not found" was returned from the OS-specific implementation. What platform are you running this on?

Please check the debug output that you get after setting debug level (https://godoc.org/github.com/google/gousb#Context.Debug) to 3 (info) or 4 (debug).

from gousb.

rlj1202 avatar rlj1202 commented on May 4, 2024

I use Windows 10 64 bit and msys2 to use mingw, libusb 1.0 and pkg-config.

from gousb.

zagrodzki avatar zagrodzki commented on May 4, 2024

the debug output would be helpful, without it I'm completely in the dark.
I can only suggest that you check that you've installed the necessary drivers, as explained here: https://github.com/libusb/libusb/wiki/Windows#Driver_Installation
My experience with Windows/libusb is very limited though, so if that doesn't help, I'm not sure I'll be able to help at all.

For confirmation that it's not a problem with gousb, you might want to write a short C example that would open the device: try using https://github.com/libusb/libusb/blob/master/examples/listdevs.c as the base, and around line 38 add a call to libusb_open() and check the return value. If I'm correct, then it will also return -5 and the problem lies entirely within libusb.

from gousb.

rlj1202 avatar rlj1202 commented on May 4, 2024
2232:1008 (bus 2, device 3): -12 path: 1.4
04e8:6860 (bus 1, device 4): -12 path: 1.2
046d:c52b (bus 1, device 3): -12 path: 1.1
8087:0024 (bus 2, device 2): -12 path: 1
8087:0024 (bus 1, device 2): -12 path: 1
04e8:6860 (bus 1, device 4): -12 path: 1.2
046d:c52b (bus 1, device 3): 0 path: 1.1
0781:5571 (bus 1, device 6): -12 path: 1.5
8086:1c26 (bus 1, device 1): -12
2232:1008 (bus 2, device 3): -5 path: 1.4
04e8:6860 (bus 1, device 4): -12 path: 1.2
04e8:6860 (bus 1, device 4): -12 path: 1.2
8086:1c2d (bus 2, device 1): -12
8086:0189 (bus 1, device 5): -12 path: 1.3

Well, the only one which is opened successfully is mouse(HID) and the others are unsupported or not found. The device I want to communicate with is 04e8:6860 and this device returns error code -12. But in gousb, it returns -5.

Here is a full console debug output.

ctx := gousb.NewContext()
defer ctx.Close()

ctx.Debug(4)

devices, err := ctx.OpenDevices(func (desc *gousb.DeviceDesc) bool {
	return desc.Vendor == gousb.ID(0x04e8) && desc.Product == gousb.ID(0x6860)
})
[ 0.014009] [000029a0] libusb: debug [libusb_get_device_list] 
[ 0.014009] [00003c9c] libusb: debug [libusb_get_next_timeout] no URBs, no timeout!
[ 0.014009] [00003c9c] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.014009] [00003c9c] libusb: debug [handle_events] poll fds modified, reallocating
[ 0.014009] [00003c9c] libusb: debug [handle_events] poll() 1 fds with timeout in 100ms
[ 0.015011] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [24B]
[ 0.015011] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [90]
[ 0.018012] [000029a0] libusb: debug [get_api_type] driver(s): usbhub
[ 0.018012] [000029a0] libusb: debug [get_api_type] matched driver name against HUB API
[ 0.018012] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [312]
[ 0.019013] [000029a0] libusb: debug [get_api_type] driver(s): usbhub
[ 0.020013] [000029a0] libusb: debug [get_api_type] matched driver name against HUB API
[ 0.020013] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [4]
[ 0.021014] [000029a0] libusb: debug [get_api_type] driver(s): usbhub
[ 0.021014] [000029a0] libusb: debug [get_api_type] matched driver name against HUB API
[ 0.021014] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [6]
[ 0.022015] [000029a0] libusb: debug [get_api_type] driver(s): usbhub
[ 0.022015] [000029a0] libusb: debug [get_api_type] matched driver name against HUB API
[ 0.022015] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [210]
[ 0.024017] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [37C]
[ 0.024017] [000029a0] libusb: debug [init_device] got bus number from ancestor #4
[ 0.114408] [00003c9c] libusb: debug [handle_events] poll() returned 0
[ 0.114408] [00003c9c] libusb: debug [libusb_get_next_timeout] no URBs, no timeout!
[ 0.114408] [00003c9c] libusb: debug [libusb_handle_events_timeout_completed] doing our own event handling
[ 0.114408] [00003c9c] libusb: debug [handle_events] poll() 1 fds with timeout in 100ms
[ 0.120937] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.120937] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 1261 bytes)
[ 0.120937] [000029a0] libusb: debug [init_device] (bus: 2, addr: 3, depth: 1, port: 4): '\\.\USB#VID_2232&PID_1008&MI_00#7&35941262&0&0000'
[ 0.122162] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [350]
[ 0.122162] [000029a0] libusb: debug [init_device] got bus number from ancestor #4
[ 0.122162] [000029a0] libusb: debug [init_device] found 2 configurations (active conf: 2)
[ 0.123163] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 47 bytes)
[ 0.123163] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 1 (bConfigurationValue=2, 113 bytes)
[ 0.123163] [000029a0] libusb: debug [init_device] (bus: 1, addr: 4, depth: 1, port: 2): '\\.\USB#VID_04E8&PID_6860&MS_COMP_MTP&SAMSUNG_ANDROID#7&12639422&0&0000'
[ 0.124166] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [62]
[ 0.124166] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.126165] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 84 bytes)
[ 0.126165] [000029a0] libusb: debug [init_device] (bus: 1, addr: 3, depth: 1, port: 1): '\\.\USB#VID_046D&PID_C52B&MI_00#7&13A163DB&0&0000'
[ 0.127168] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [4] (2.0)
[ 0.127168] [000029a0] libusb: debug [init_device] got bus number from ancestor #2
[ 0.127168] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.134170] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 25 bytes)
[ 0.134170] [000029a0] libusb: debug [init_device] (bus: 2, addr: 2, depth: 1, port: 1): '\\.\USB#VID_8087&PID_0024#5&294AA54E&0&1'
[ 0.135170] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [6] (1.0)
[ 0.135170] [000029a0] libusb: debug [init_device] got bus number from ancestor #2
[ 0.135170] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.135170] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 25 bytes)
[ 0.135170] [000029a0] libusb: debug [init_device] (bus: 1, addr: 2, depth: 1, port: 1): '\\.\USB#VID_8087&PID_0024#5&3188685F&0&1'
[ 0.137172] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [235]
[ 0.137172] [000029a0] libusb: debug [init_device] found 2 configurations (active conf: 2)
[ 0.137172] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 47 bytes)
[ 0.138172] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 1 (bConfigurationValue=2, 113 bytes)
[ 0.138172] [000029a0] libusb: debug [init_device] (bus: 1, addr: 4, depth: 2, port: 2): '\\.\USB#VID_046D&PID_C52B&MI_01#7&13A163DB&0&0001'
[ 0.139172] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [3CC]
[ 0.139172] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.141175] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 84 bytes)
[ 0.141175] [000029a0] libusb: debug [init_device] (bus: 1, addr: 3, depth: 2, port: 1): '\\.\USB#VID_046D&PID_C52B#6&24B49AB9&0&1'
[ 0.141175] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [A0]
[ 0.141175] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.141175] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 32 bytes)
[ 0.141175] [000029a0] libusb: debug [init_device] (bus: 1, addr: 6, depth: 2, port: 5): '\\.\USB#VID_0781&PID_5571#4C530010431222105184'
[ 0.142176] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [312] (1.0)
[ 0.142176] [000029a0] libusb: debug [init_device] (bus: 1, addr: 1, depth: 0, port: 0): '\\.\USB#ROOT_HUB20#4&41BCCFE&0'
[ 0.142176] [000029a0] libusb: debug [discovered_devs_append] need to increase capacity
[ 0.143177] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [374]
[ 0.143177] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.143177] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 1261 bytes)
[ 0.143177] [000029a0] libusb: debug [init_device] (bus: 2, addr: 3, depth: 2, port: 4): '\\.\USB#VID_2232&PID_1008#6&39136506&0&4'
[ 0.144177] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [2A0]
[ 0.144177] [000029a0] libusb: debug [init_device] found 2 configurations (active conf: 2)
[ 0.145178] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 47 bytes)
[ 0.145178] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 1 (bConfigurationValue=2, 113 bytes)
[ 0.145178] [000029a0] libusb: debug [init_device] (bus: 1, addr: 4, depth: 2, port: 2): '\\.\USB#VID_04E8&PID_6860&MODEM#7&12639422&0&0001'
[ 0.146179] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [2C9]
[ 0.146179] [000029a0] libusb: debug [init_device] found 2 configurations (active conf: 2)
[ 0.147179] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 47 bytes)
[ 0.147179] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 1 (bConfigurationValue=2, 113 bytes)
[ 0.149181] [000029a0] libusb: debug [init_device] (bus: 1, addr: 4, depth: 2, port: 2): '\\.\USB#VID_04E8&PID_6860#310013C8287933F5'
[ 0.150180] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [210] (2.0)
[ 0.150180] [000029a0] libusb: debug [init_device] (bus: 2, addr: 1, depth: 0, port: 0): '\\.\USB#ROOT_HUB20#4&9284A44&0'
[ 0.151180] [000029a0] libusb: debug [windows_get_device_list] allocating new device for session [3F6]
[ 0.151180] [000029a0] libusb: debug [init_device] found 1 configurations (active conf: 1)
[ 0.153684] [000029a0] libusb: debug [cache_config_descriptors] cached config descriptor 0 (bConfigurationValue=1, 177 bytes)
[ 0.153684] [000029a0] libusb: debug [init_device] (bus: 1, addr: 5, depth: 2, port: 3): '\\.\USB#VID_8086&PID_0189#6&24B49AB9&0&3'
[ 0.156186] [000029a0] libusb: debug [get_api_type] driver(s): BTHUSB
[ 0.156687] [000029a0] libusb: debug [get_api_type] lower filter driver(s): iBtFltCoex
[ 0.156687] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [3F6] (1.5)
[ 0.158688] [000029a0] libusb: debug [get_api_type] driver(s): dg_ssudbus
[ 0.158688] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [2C9] (1.4)
[ 0.160689] [000029a0] libusb: debug [get_api_type] driver(s): usbccgp
[ 0.161189] [000029a0] libusb: debug [get_api_type] matched driver name against Composite API
[ 0.161189] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [374] (2.3)
[ 0.163191] [000029a0] libusb: debug [get_api_type] driver(s): usbccgp
[ 0.163191] [000029a0] libusb: debug [get_api_type] matched driver name against Composite API
[ 0.163691] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [3CC] (1.3)
[ 0.165192] [000029a0] libusb: debug [get_api_type] driver(s): USBSTOR
[ 0.165692] [000029a0] libusb: debug [windows_get_device_list] found existing device for session [A0] (1.6)
[ 0.166694] [000029a0] libusb: debug [windows_get_device_list] unlisted ancestor for '\\.\HID#SAM0714#3&21E1602B&0&0000' (non USB HID, newly connected, etc.) - ignoring
[ 0.166694] [000029a0] libusb: debug [windows_get_device_list] setting composite interface for [3CC]:
[ 0.166694] [000029a0] libusb: debug [set_composite_interface] interface[2] = \\.\HID#VID_046D&PID_C52B&MI_02&COL01#8&189462C0&0&0000#{4D1E55B2-F16F-11CF-88CB-001111000030}
[ 0.166694] [000029a0] libusb: debug [windows_get_device_list] setting composite interface for [3CC]:
[ 0.166694] [000029a0] libusb: debug [set_composite_interface] interface[2] already set - ignoring HID collection: \\.\HID#VID_046D&PID_C52B&MI_02&COL02#8&189462C0&0&0001
[ 0.166694] [000029a0] libusb: debug [windows_get_device_list] setting composite interface for [3CC]:
[ 0.166694] [000029a0] libusb: debug [set_composite_interface] interface[2] already set - ignoring HID collection: \\.\HID#VID_046D&PID_C52B&MI_02&COL03#8&189462C0&0&0002
[ 0.166694] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.166694] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.166694] [000029a0] libusb: debug [parse_configuration] skipping descriptor 0xb
[ 0.166694] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 25
[ 0.166694] [000029a0] libusb: debug [libusb_unref_device] destroy device 2.3
[ 0.166694] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.166694] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.166694] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.166694] [000029a0] libusb: debug [libusb_get_config_descriptor] index 1
[ 0.166694] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.166694] [000029a0] libusb: debug [parse_endpoint] skipping descriptor b
[ 0.166694] [000029a0] libusb: debug [libusb_open] open 1.4
[ 0.166694] [000029a0] libusb: debug [unsupported_open] unsupported API call for 'open' (unrecognized device driver)
[ 0.166694] [000029a0] libusb: debug [libusb_open] open 1.4 returns -12
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.4
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.3
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 1
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor b
[ 0.171199] [000029a0] libusb: debug [libusb_open] open 1.4
[ 0.171199] [000029a0] libusb: debug [unsupported_open] unsupported API call for 'open' (unrecognized device driver)
[ 0.171199] [000029a0] libusb: debug [libusb_open] open 1.4 returns -12
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.4
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.3
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.6
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [parse_configuration] skipping descriptor 0xb
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 25
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 2.3
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 2.2
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 1
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor b
[ 0.171199] [000029a0] libusb: debug [libusb_open] open 1.4
[ 0.171199] [000029a0] libusb: debug [unsupported_open] unsupported API call for 'open' (unrecognized device driver)
[ 0.171199] [000029a0] libusb: debug [libusb_open] open 1.4 returns -12
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.4
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 1
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor 24
[ 0.171199] [000029a0] libusb: debug [parse_endpoint] skipping descriptor b
[ 0.171199] [000029a0] libusb: debug [libusb_open] open 1.4
[ 0.171199] [000029a0] libusb: debug [unsupported_open] unsupported API call for 'open' (unrecognized device driver)
[ 0.171199] [000029a0] libusb: debug [libusb_open] open 1.4 returns -12
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.4
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 2.1
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 2.0
[ 0.171199] [000029a0] libusb: debug [libusb_get_device_descriptor] 
[ 0.171199] [000029a0] libusb: debug [libusb_get_config_descriptor] index 0
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.5
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.2
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.1
[ 0.171199] [000029a0] libusb: debug [libusb_unref_device] destroy device 1.0
[ 0.215231] [00003c9c] libusb: debug [handle_events] poll() returned 0
[ 0.215231] [00003c9c] libusb: debug [libusb_exit] 
[ 0.215231] [00003c9c] libusb: debug [libusb_exit] destroying default context

from gousb.

zagrodzki avatar zagrodzki commented on May 4, 2024

These logs and the errors from C libusb definitely point to lack of the drivers. The only APIs reported in this log is the HUB API and the Composite API, while based on the code I'd expect to see an entry with "WinUSB-like APIs", which would match either libusbK, libusb0 or WinUSB drivers. I think the difference between -5 (not found) and -12 (not supported) in gousb may be safely ignored for now, just get the C libusb to open your device successfuly.

Please follow the instructions in https://github.com/libusb/libusb/wiki/Windows#how-to-use-libusb-on-windows to install the required drivers.

from gousb.

rlj1202 avatar rlj1202 commented on May 4, 2024

Thank for your kind answer! I tried many of drivers but neither one was suitable perfectly for my phone. Maybe I have to use Windows SDK.

from gousb.

zagrodzki avatar zagrodzki commented on May 4, 2024

Note: these drivers are not "phone drivers" in any case. They are drivers that allow libusb raw access to the USB devices (generic USB, not any particular type of the USB device). That means installing e.g. libsubK (http://libusbk.sourceforge.net/UsbK3/index.html).

from gousb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.