Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F82516782
AscCam.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Sep 11, 21:15
Size
4 KB
Mime Type
text/x-python
Expires
Fri, Sep 13, 21:15 (1 d, 22 h)
Engine
blob
Format
Raw Data
Handle
20708544
Attached To
rASCAM AscCam
AscCam.py
View Options
#!/usr/bin/python3
# Few required libraries
import
tkinter
as
tk
import
os
import
time
from
picamera
import
PiCamera
# Main Tkinter class
class
GUI
(
tk
.
Frame
):
# Initialization of the class
def
__init__
(
self
,
master
=
None
):
super
()
.
__init__
(
master
)
self
.
master
=
master
# Create the GUI
self
.
create_widgets
()
# Instantiate the camera
self
.
camera
=
PiCamera
(
sensor_mode
=
3
,
resolution
=
PiCamera
.
MAX_RESOLUTION
,
framerate
=
1
)
#filepath for output:
self
.
basePath
=
'/home/pi/Desktop/Imaging/{}'
.
format
(
time
.
strftime
(
'%Y-%m-
%d
'
))
if
not
os
.
path
.
exists
(
self
.
basePath
):
os
.
mkdir
(
self
.
basePath
)
os
.
chown
(
self
.
basePath
,
1000
,
1000
)
# Create the main GUI
def
create_widgets
(
self
):
# Create separate frames to group similar buttons
frame1
=
tk
.
Frame
(
master
=
self
.
master
,
bd
=
2
,
relief
=
"ridge"
)
frame1
.
grid
(
row
=
0
,
column
=
0
,
columnspan
=
1
,
rowspan
=
3
,
sticky
=
"N"
)
frame2
=
tk
.
Frame
(
master
=
self
.
master
,
bd
=
2
)
frame2
.
grid
(
row
=
0
,
column
=
1
,
columnspan
=
2
,
rowspan
=
1
,
sticky
=
"NW"
)
frame3
=
tk
.
Frame
(
master
=
self
.
master
,
bd
=
2
,
relief
=
"ridge"
)
frame3
.
grid
(
row
=
2
,
column
=
1
,
columnspan
=
2
,
rowspan
=
2
,
sticky
=
"NW"
)
# In Frame1 the general handling buttons
# Place the first item (a label) in the first frame
self
.
camLabel
=
tk
.
Label
(
master
=
frame1
,
text
=
"CAMERA"
)
self
.
camLabel
.
pack
()
# Then the buttons
self
.
camOnButt
=
tk
.
Button
(
master
=
frame1
,
text
=
"ON"
,
fg
=
"green"
,
command
=
self
.
camOn
)
self
.
camOnButt
.
pack
()
self
.
camOffButt
=
tk
.
Button
(
master
=
frame1
,
text
=
"OFF"
,
fg
=
"red"
,
command
=
self
.
camOff
)
self
.
camOffButt
.
pack
()
# the acquisition section
self
.
camResLabel
=
tk
.
Label
(
master
=
frame1
,
text
=
" Acquisition "
)
self
.
camResLabel
.
pack
()
self
.
camSnapButt
=
tk
.
Button
(
master
=
frame1
,
text
=
"Snapshot"
,
command
=
self
.
camSnap
)
self
.
camSnapButt
.
pack
()
self
.
camTLButt
=
tk
.
Button
(
master
=
frame1
,
text
=
"Time Lapse"
,
command
=
self
.
camTL
)
self
.
camTLButt
.
pack
()
self
.
camRecButt
=
tk
.
Button
(
master
=
frame1
,
text
=
"Video"
,
command
=
self
.
camRec
)
self
.
camRecButt
.
pack
()
# The Exit section
self
.
camResLabel
=
tk
.
Label
(
master
=
frame1
,
text
=
" Exit "
)
self
.
camResLabel
.
pack
(
fill
=
"x"
)
self
.
quit
=
tk
.
Button
(
master
=
frame1
,
text
=
"QUIT"
,
fg
=
"blue"
,
command
=
self
.
master
.
destroy
)
self
.
quit
.
pack
()
# In Frame 2, the camera's options
self
.
zoomVar
=
tk
.
DoubleVar
(
value
=
1.0
)
self
.
camZoom
=
tk
.
Scale
(
master
=
frame2
,
label
=
"Digi Zoom"
,
variable
=
self
.
zoomVar
,
from_
=
1
,
to
=
10
,
resolution
=
1
,
orient
=
"horizontal"
,
command
=
self
.
setZoom
)
self
.
camZoom
.
set
(
1.0
)
self
.
camZoom
.
pack
()
self
.
wbLabel
=
tk
.
Label
(
master
=
frame2
,
text
=
" White-balance modes "
)
self
.
wbLabel
.
pack
(
fill
=
"x"
)
wb_options
=
list
(
PiCamera
.
AWB_MODES
.
keys
())
self
.
wbVar
=
tk
.
StringVar
()
self
.
wbVar
.
set
(
"auto"
)
self
.
wbMenu
=
tk
.
OptionMenu
(
frame2
,
self
.
wbVar
,
*
wb_options
)
self
.
wbMenu
.
pack
(
fill
=
"x"
)
self
.
expLabel
=
tk
.
Label
(
master
=
frame2
,
text
=
" Exposure modes "
)
self
.
expLabel
.
pack
(
fill
=
"x"
)
exp_options
=
list
(
PiCamera
.
EXPOSURE_MODES
.
keys
())
self
.
expVar
=
tk
.
StringVar
()
self
.
expVar
.
set
(
"auto"
)
self
.
expMenu
=
tk
.
OptionMenu
(
frame2
,
self
.
expVar
,
*
exp_options
)
self
.
expMenu
.
pack
(
fill
=
"x"
)
def
camOn
(
self
):
self
.
camera
.
start_preview
(
fullscreen
=
False
,
window
=
(
0
,
0
,
640
,
480
))
return
def
camOff
(
self
):
self
.
camera
.
stop_preview
()
return
def
camSnap
(
self
):
photoPath
=
self
.
basePath
+
'/snaps/'
#check to see if the snap output folder is present:
if
not
os
.
path
.
exists
(
photoPath
):
#if not, create it:
os
.
makedirs
(
photoPath
)
os
.
chown
(
photoPath
,
1000
,
1000
)
# Camera warm-up time
time
.
sleep
(
1
)
self
.
camera
.
capture
(
photoPath
+
'snap_'
+
time
.
strftime
(
"%Y-%m-
%d
-%H-%M-%S"
)
+
'.jpg'
)
return
def
camTL
(
self
):
return
def
camRec
(
self
):
return
def
setZoom
(
self
,
zoom
):
zoomSide
=
1
/
float
(
zoom
)
edge
=
(
1
-
zoomSide
)
*
0.5
self
.
camera
.
zoom
=
(
edge
,
edge
,
zoomSide
,
zoomSide
)
return
root
=
tk
.
Tk
()
root
.
title
(
"AscCam 0.01"
)
root
.
resizable
(
width
=
False
,
height
=
False
)
root
.
geometry
(
"+15+400"
)
app
=
GUI
(
master
=
root
)
app
.
mainloop
()
Event Timeline
Log In to Comment