This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
uvscada:gxs700 [2017/12/04 18:30] – [Table] mcmaster | uvscada:gxs700 [2020/09/16 06:57] (current) – removed mcmaster | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | Quick start guide to getting the sensor working. | ||
- | |||
- | - Install software | ||
- | - Force a capture to verify the sensor works | ||
- | - Fire x-rays at sensor to test full functionality | ||
- | |||
- | [[https:// | ||
- | |||
- | [[https:// | ||
- | |||
- | ====== WARNING ====== | ||
- | |||
- | x-rays are dangerous…make sure you know what you are doing. | ||
- | |||
- | ====== Supported devices ====== | ||
- | |||
- | ^ Image ^ Vendor | ||
- | | | Gendex | ||
- | | | Gendex | ||
- | | | Dexis | Platinum | ||
- | | | Dexis | Plus 690 | Probably | ||
- | |||
- | I don't know if any other vendors (ex: schick) use the same hardware | ||
- | |||
- | |||
- | ====== Installation ====== | ||
- | |||
- | Prereq: | ||
- | |||
- | * Linux | ||
- | * Tested on Ubuntu 12.04 x64, Ubuntu 16.04 x64 | ||
- | * WARNING for VM users: only size 2 works | ||
- | * You must use native linux for size 1, see below | ||
- | * USB port (duh) | ||
- | * A supported sensor | ||
- | * x-ray source: not needed for initial setup | ||
- | * You DO NOT need calibration files | ||
- | * See below for details | ||
- | |||
- | "$ cmd" means type " | ||
- | |||
- | Do (I'll improve this as people run into problems): | ||
- | |||
- | - $ sudo apt-get install -y git python-pip | ||
- | * Also maybe: sudo apt-get install -y python-serial python-numpy python-PIL | ||
- | - $ sudo pip install libusb1 | ||
- | - $ git clone [[https:// | ||
- | - $ cd uvscada | ||
- | - $ ln -s $PWD/ | ||
- | - $ ./ | ||
- | - Plug in your sensor to the USB port | ||
- | * Re-plug it if its already plugged in | ||
- | - $ python gxs700/ | ||
- | * Optional (highly recommended): | ||
- | - $ python gxs700/ | ||
- | * Optional: test sensor by forcing a capture | ||
- | |||
- | |||
- | ====== Force capture ====== | ||
- | |||
- | This step tests the sensor without actually firing x-rays at it. This is also useful for calibrating sensor defects | ||
- | |||
- | {{: | ||
- | |||
- | - $ python gxs700/ | ||
- | - Check which you got: | ||
- | * Waiting for image: expected response. | ||
- | * " | ||
- | - It should have written capture_000.png and capture_000.bin to the current directory | ||
- | - Above will be very dark. Enhance contrast by doing histogram equalization: | ||
- | - You should see an image roughly resembling the reference above. | ||
- | |||
- | ====== X-ray capture ====== | ||
- | |||
- | {{: | ||
- | |||
- | Suggest you force a capture first to verify your sensor is working | ||
- | |||
- | - $ python gxs700/ | ||
- | - Verify it says " | ||
- | - Fire your x-ray source | ||
- | - It should notice the x-rays and begin downloading an image | ||
- | - It should have written capture_000.png to the current directory | ||
- | - Currently also writes capture_000.bin but will probably remove this soon | ||
- | - You have your first x-ray! | ||
- | |||
- | ====== Diagnostic dump ====== | ||
- | |||
- | Please do this and send me the result. | ||
- | |||
- | - $ python gxs700/ | ||
- | |||
- | Send me the directory " | ||
- | |||
- | [[https:// | ||
- | |||
- | |||
- | ====== Troubleshooting ====== | ||
- | |||
- | Troubleshooting: | ||
- | |||
- | * Couldn' | ||
- | * Did you run the udev permission script? | ||
- | * Try re-plugging it in and/or restarting Linux system | ||
- | * VM: did you connect USB to the guest? | ||
- | * Didn't detect x-rays | ||
- | * Can you turn up current higher? | ||
- | * Only recently added mA monitoring…don' | ||
- | * Too high or low kVp? | ||
- | * 60 kVp is a good place to start | ||
- | |||
- | Known issues: | ||
- | |||
- | * Multiple sensors are not supported | ||
- | * Would slightly increase software complexity and no use case today for that | ||
- | * The small sensor is not supported | ||
- | * Dexis untested | ||
- | * Really, only tested against my one sensor | ||
- | * Usually can be interrupted but sometimes will fail init if it is | ||
- | * Workaround: re-plug the USB port | ||
- | |||
- | Misc: | ||
- | |||
- | * USB speed limits frame rate to something like 0.3 FPS…don' | ||
- | * Currently doesn' | ||
- | * .bin file is raw output. | ||
- | * Image decoding can probably be made much faster but usually I don't care | ||
- | * For long runs (ex: CBCT) I'm waiting for sensor to cool anyway | ||
- | |||
- | See also: GXS700 general troubleshooting | ||
- | |||
- | |||
- | ===== Size 1 corruption ===== | ||
- | |||
- | Update: originally this was though to be a visualization issue. Now its believed to be a USB controller issue | ||
- | |||
- | TLDR: 2017-10-10 size 1 test results: | ||
- | * VMWare: transfers very slowly, yielding a corrupt image | ||
- | * VirtualBox: freezes the *host* | ||
- | |||
- | |||
- | {{: | ||
- | |||
- | Above: good capture on one machine. Capture took about 3 seconds | ||
- | |||
- | {{: | ||
- | |||
- | Above: same sensor on a different native Linux machine. Capture took about 30 seconds | ||
- | |||
- | So if you have a size 1 sensor, unfortunately you may need to use native Linux. | ||
- | |||
- | Details: Size 1 sensors use USB interrupt transfers while size 2 sensors use USB bulk transfers. Unfortunately, | ||
- | |||
- | Parallels has not been tested. Would be interested in feedback. | ||
- | |||
- | ^ Size ^ Machine | ||
- | | 1 | Thinkpad Carbon X1 | Intel Sunrise Point-LP USB 3.0 xHCI Controller (rev 21) | Ubuntu 14.04 x64 | Native | ||
- | | 1 | JM desktop | ||
- | | 1 | User1 desktop | ||
- | | 1 | User1 desktop | ||
- | | 1 | User1 desktop | ||
- | | 1 | Thinkpad T61P | Intel 82801H | ||
- | | 1 | Thinkpad T61P | ExpressCard (NEC uPD720200 USB 3.0?) | Ubuntu 12.04 x64 | Native | ||
- | | 1 | Thinkpad W520 | NEC uPD720200 USB 3.0 | Ubuntu 14.04 x64 | Native | ||
- | | 1 | Thinkpad W520 | Intel 6 Series/ | ||
- | | 1 | JM server | ||
- | | 1 | JM server | ||
- | |||
- | {{: | ||
- | |||
- | Above: kernel panic W520 USB 2 port | ||
- | |||
- | ====== Decoding ====== | ||
- | |||
- | decode.py has a " | ||
- | |||
- | Example | ||
- | |||
- | < | ||
- | $ python decode.py -e capture_004.bin capture_004e.png | ||
- | </ | ||
- | |||
- | NOTE: future revisions may require .png input instead of .bin | ||
- | |||
- | ====== x-ray trigger ====== | ||
- | |||
- | I haven' | ||
- | |||
- | ====== x-ray fire ====== | ||
- | |||
- | I use a Gendex GE-100 x-ray head. I've found these readily available for <$75 on both eBay and Craigslist. | ||
- | |||
- | I control the setup via a DLI WPS7. When wired correctly: | ||
- | |||
- | * Outlet 1: HV | ||
- | * Outlet 2: filament | ||
- | |||
- | do something like: | ||
- | |||
- | < | ||
- | $ WPS7_HOST=wpsip WPS7_PASS=mypassword python fire.py | ||
- | </ | ||
- | |||
- | to fire an x-ray (ie when the sensor is armed. | ||
- | |||
- | Note: you can also set these environment variables in files like .bashrc so you don't have to type them for each command | ||
- | |||
- | I recommend you use a hard wired ethernet line and have a way to cut power to the switch remotely if it fails. | ||
- | |||
- | TODO: use WPS7 scripting capability to make switch throws atomic | ||
- | |||
- | ====== Calibration ====== | ||
- | |||
- | Takes raw, uncalibrated images. | ||
- | |||
- | That said, I'm not against coming up with an independent calibration scheme. | ||
- | |||
- | ====== Quality ====== | ||
- | |||
- | I haven' | ||
- | |||
- | ====== Stitching ====== | ||
- | |||
- | stitch.sh has an example workflow using pr0ntools (panotools). | ||
- | |||