Giter Site home page Giter Site logo

wagenrace / cytosmartopenapi Goto Github PK

View Code? Open in Web Editor NEW

This project forked from cytosmart-bv/axionvueopenapi

1.0 1.0 0.0 125.04 MB

This is a python wrapper for the Lux Client windows solution. The package will only work on Windows.

Home Page: https://cytosmart.com/products/lux2

License: Other

Python 100.00%

cytosmartopenapi's Introduction

Downloads Downloads

CytoSMART Open API

This is a Python wrapper for the CytoSMART Windows app to use it headless. The package will only work on Windows 10 and above.

This package was formally known as luxconnector

Warranty

⚠️ Hardware warranty is void by using this open API ⚠️:

Using the CytoSmartOpenAPI means you will have NO hardware warranty (see license).

This is because our devices are made to handle the normal usage (the GUI app). It also includes additionally bought warranty. Only if your additionally bought warranty implicitly includes the open API usage you will have warranty.

Installation

To install this package follow these steps:

Step 1: Drivers

Make sure you had a CytoSmart application installed.

Recommended is the cell counter given it does not restart itself after closing. This is needed to have all the correct drivers installed. Uninstall the app afterwards. If the app is on the same machine the Open API might connect with the wrong one.

Step 2: pip install

pip install CytoSmartOpenAPI

Initialization

Make sure at least one CytoSMART device is physically connected to your computer via a USB3 port. The CytoSmartOpenAPI is an object that maintains the connection with the device. To create the object use the following code:

from CytoSmartOpenAPI import CytoSmartOpenAPI
connector = CytoSmartOpenAPI(number_of_devices=2, warranty=False)

⚠️ You are voiding your warranty by using this package

NOTE: Make sure number_of_devices does not exceed the number of devices you have physically connected. Otherwise the CytoSmartOpenAPI will look for the missing devices forever.

Getting serial numbers

Each physical device has a serial number. This number is needed to send commands to a specific device.

serial_numbers = connector.get_all_serial_numbers()

Getting a single image

When you want a single image taken at this moment use get_image. This will return the image as a pillow image. You need to give the serial number of the device you want to target

img = connector.get_image(serial_number)

or

img = connector.get_image(serial_numbers[index])

Changing the focus

This function will change the focus for the CytoSmartOpenAPI object. Every image taken after this function will have the new focus.

The focus is in the range 0 until 1. (0.0 and 1.0 are valid entries)

You need to give the serial number of the device you want to target

connector.set_focus(serial_number, 0.5)
img1 = connector.get_image(serial_number) # Image with focus of 0.5
connector.set_focus(serial_number, 0.7)
img2 = connector.get_image(serial_number) # Image with focus of 0.7
img3 = connector.get_image(serial_number) # Image with focus of 0.7

Getting the temperature

This function returns the temperature in Celsius of the device.

You need to give the serial number of the device you want to target

temperature = connector.get_temperature(serial_number)

Change activate camera (fluorescence)

To use fluorescence you will need change the active camera. The camera can be set to 3 different values, RED, GREEN, or BRIGHTFIELD. This will only work if your device is an FL device otherwise only BRIGHTFIELD is available.

connector.set_active_camera(serial_number, "RED")
connector.set_active_camera(serial_number, "GREEN")
connector.set_active_camera(serial_number, "BRIGHTFIELD")

Change camera setting

Each camera has its own settings. Not all settings are available for BRIGHTFIELD.

  • exposure: The time in milliseconds that the camera is detecting light. (Lux and Exact devices only; for Omni devices use flash duration)
  • gain: The multiplication of the camera. (Fluo only) If very little light goes into the camera sensor make sure the gain is high.
  • brightness: Strength of the led when it is on (Fluo only)
  • focus_offset: the difference in focus between brightfield and fluo. If focus is set to 0.4 and focus_offset for RED is set to 0.1 RED focus is 0.5 (Fluo only)
connector.set_camera_settings(serial_number, "RED", 500, gain=30, brightness=5000, focus_offset=0.0)
connector.set_camera_settings(serial_number, "BRIGHTFIELD", 10)

Change flash duration (Omni only)

The Omni cannot change the exposure time but can change the time the led is on. This can be done with set_flash_duration. It will set the duration between 40 and 250 μs.

connector.set_flash_duration(serial_number, duration=120)

If you do NOT have an Omni use set_camera_settings.

Getting a z-stack

This function will return a list of pillow images. Each image will be at a different focus level.

This code will create a z-stack of 6 images. The focuses of these images will be [0.5, 0.6, 0.7, 0.8, 0.9, 1.0]

You need to give the serial number of the device you want to target

list_of_imgs = connector.get_z_stack(serial_number, num_img = 6, start_focus = 0.5, stop_focus = 1)

Change stage (Omni only)

To change the position of the Omni stage (camera, led, arm, ect.) give the new position in mm.

  • Position x in mm
  • Position y in mm
  • Time in seconds it can wait till it arrives (default 60)
connector.move_stage(serial_number, 100, 100, 60)

After this the normal process for obtaining and changing cameras applies.

Get stage position (Omni only)

If you need to know where the stage is use get_position. This also works if the Omni moved without a move_stage command (e.g. when it goes to sleep).

print(connector.get_position(serial_number))

Changing zoom modes (Lux only)

There are 2 zoom modes: "IN" and "OUT". While zoomed in the resolution is higher but the ROI is smaller, zoomed out has a higher ROI but a lower resolution.

Changing this will change it for every image or z-stack taken afterwards.

You need to give the serial number of the device you want to target

connector.set_zoom(serial_number, "IN")
img1 = connector.get_image(serial_number) # Image is zoomed in
connector.set_zoom(serial_number, "OUT")
img2 = connector.get_image(serial_number) # Image is zoomed out

Live view

The live view of the device is hosted at http://localhost:3333/cytosmartservice/live?serialNumber=##########. This image can only been seen if the live view is turned on (by default the live view is turned on).

You need to give the serial number of the device you want to target at the place of the #-symbols.

connector.set_liveview(serial_number, True) # in the browser you can see the image being updated
connector.set_liveview(serial_number, False) # Led of device turns off till you take a picture

Developers

Developers of the CytoSmartOpenAPI please look at the developers readme

Credits

  • Tom Nijhof
  • Nora
  • Tessa

cytosmartopenapi's People

Contributors

wagenrace avatar karinakozarova avatar styxpalm avatar mvvijven avatar

Stargazers

Genius Dev avatar

Watchers

James Cloos avatar

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.